


Kann eine gemeinsame Funktion das Überladen von Kopierkonstruktoren und Zuweisungsoperatoren vereinfachen?
Nov 27, 2024 am 03:15 AMErstellen einer gemeinsamen Funktion für den Kopierkonstruktor und den Zuweisungsoperator
Ein Kopierkonstruktor und eine Zuweisungsoperatorüberladung haben häufig denselben Code und unterscheiden sich nur darin ihren Rückgabetyp. Können wir dies vereinfachen, indem wir eine gemeinsame Funktion erstellen, die beide verwenden können?
Option 1: Expliziter Aufruf von Operator= aus dem Kopierkonstruktor
MyClass(const MyClass& other) { operator=(other); }
Von diesem Ansatz wird im Allgemeinen abgeraten da es Probleme mit der Altstaatsverwaltung und Selbstzuweisung mit sich bringt. Darüber hinaus werden alle Mitglieder standardmäßig initialisiert, auch wenn sie vom anderen Objekt zugewiesen werden.
Option 2: Operator implementieren = Kopierkonstruktor und Austausch verwenden
A bevorzugt Die Lösung besteht darin, „operator=“ mithilfe des Kopierkonstruktors und einer Swap-Methode zu implementieren:
MyClass& operator=(const MyClass& other) { MyClass tmp(other); swap(tmp); return *this; }
Oder sogar:
MyClass& operator=(MyClass other) { swap(other); return *this; }
Die Swap-Funktion tauscht den Besitz der internen Daten aus, ohne den bestehenden Zustand zu bereinigen oder neue Ressourcen zuzuweisen. Dieser Ansatz ist selbstzuweisungssicher und stark ausnahmesicher, vorausgesetzt, dass der Swap-Vorgang ein No-Wurf-Vorgang ist.
Vorsichtsmaßnahmen:
Stellen Sie sicher, dass die Swap-Methode einen wahren Wert ausführt swap, nicht der Standardwert std::swap, der auf dem Kopierkonstruktor und Zuweisungsoperator selbst basiert. Verwenden Sie den Member-Swap für primitive Typen und Zeigertypen, um ein No-Wurf-Verhalten zu gewährleisten.
Das obige ist der detaillierte Inhalt vonKann eine gemeinsame Funktion das Überladen von Kopierkonstruktoren und Zuweisungsoperatoren vereinfachen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GULC: C -Bibliothek von Grund auf neu gebaut

Welche Werte sind von C -Sprachfunktionen zurückgegeben? Was bestimmt den Rückgabewert?

C Sprachfunktionsformat -Buchstaben -Fall -Konvertierungsschritte

Was sind die Definitionen und Aufrufregeln von C -Sprachfunktionen und was sind die?

eindeutiger Gebrauch und Phrasenfreigabe

Wo ist der Rückgabewert der C -Sprachfunktion im Speicher?

Wie funktioniert die C -Standard -Vorlagenbibliothek (STL)?

Wie benutze ich Algorithmen aus der STL (sortieren, finden, transformieren usw.) effizient?
