wake-up-neo.com

Der Kopierkonstruktor und der Zuweisungsoperator

Wenn ich operator= Überschreibe, verwendet der Kopierkonstruktor dann automatisch den neuen Operator? Wenn ich einen Kopierkonstruktor definiere, übernimmt operator= Automatisch das Verhalten des Kopierkonstruktors.

50
Paul Manta

Nein, es handelt sich um verschiedene Operatoren.

Der Kopierkonstruktor dient zum Erstellen eines neuen Objekts. Es kopiert ein vorhandenes Objekt in ein neu erstelltes Objekt. Der Kopierkonstruktor wird zum Initialisieren einer neuen Instanz von einer alten Instanz verwendet. Es wird nicht unbedingt aufgerufen, wenn Variablen als Wert an Funktionen übergeben werden oder als Rückgabewerte aus Funktionen.

Der Zuweisungsoperator soll sich mit einem bereits vorhandenen Objekt befassen. Der Zuweisungsoperator wird verwendet, um eine vorhandene Instanz so zu ändern, dass sie dieselben Werte wie der Wert r aufweist. Dies bedeutet, dass die Instanz zerstört und neu initialisiert werden muss, wenn sie über einen internen dynamischen Speicher verfügt.

Nützlicher Link:

44
sgokhales

Nein. Sofern Sie keinen Kopierer definieren, wird ein Standard generiert (falls erforderlich). Sofern Sie keinen Operator = definieren, wird ein Standard generiert (falls erforderlich). Sie verwenden sich nicht und können unabhängig voneinander geändert werden.

12
Erik

Nein, es sind verschiedene Objekte.

Wenn Sie sich mit Codeduplizierung zwischen dem Kopierkonstruktor und dem Zuweisungsoperator befassen, beachten Sie die folgende Redewendung mit dem Namen copy and swap :

struct MyClass
{
    MyClass(const MyClass&); // Implement copy logic here
    void swap(MyClass&) throw(); // Implement a lightweight swap here (eg. swap pointers)

    MyClass& operator=(MyClass x)
    {
        x.swap(*this);
        return *this;
    }
};

Auf diese Weise erstellt der operator= Mit dem Kopierkonstruktor ein neues Objekt, das mit *this Ausgetauscht und beim Beenden der Funktion (mit dem alten this) freigegeben wird.

5
Alexandre C.

Nein, sie sind nicht derselbe Operator.

1
Jonathan Wood

Nein.

Und schauen Sie sich auf jeden Fall die Regel von drei (oder die Regel von fünf an, wenn Sie die Werte berücksichtigen)

0
stijn