C++ Unterschied Copy-Konstruktor vs. Zuweisungsoperator?

2 Antworten

Unter einer Zuweisung versteht man etwas völlig anderes wie unter einem Konstruktor oder Copy-Konstruktor.

Die Zuweisung weist einem L-Wert (Meist eine Variable oder deren Adresse) das Ergebnis berechneter R-Werte (Hier können auch Konstanten eingesetzt werden) zu.

Konstruktoren und Copy-Konstruktoren erzeugen neue Objekte!

Dein „Zuweisungoperator“ ist eine falsche Funktionsdefinition, die zudem falsch geklammert ist! Weder in der Deklaration noch in der Definition einer Funktion kommt ein Gleichheitszeichen vor!

Der Teilausdruck int i = 0 weist der Variablen (L-Wert) i die Konstante (R-Wert) 0 zu. Das Zeichen = ist der Zuweisungsoperator. Dies hat rein gar nichts mit Objekterzeugung zu tun!

Objekte werden mit einem Konstruktor oder Copy-Konstruktor erzeugt.

Kopier-Konstruktor und Zuweisungsoperator sind für Kopieraktionen zuständig. Sie sind sich darum auch sehr ähnlich. Die geringen Unterschiede rühren daher, dass zum einen der Zuweisungsoperator einen alten Wert vorfindet, der weggeräumt werden muss, und dass er zum anderen einen Wert liefern muss. Die Zuweisung einer Variable an sich selbst (l=l;) funktioniert mit dem Kopieralgorithmus nicht. Sie muss darum abgefangen werden. Glücklicherweise ist Nichtstun eine korrekte Implementierung einer Zuweisung an sich selbst. http://velociraptor.mni.fh-giessen.de/Programmierung/ProgII-htmldir/node6.html

 

Vielleicht bringt dir das was?

Dory1  16.05.2011, 13:14

(...) Der Hauptunterschied zwischen Kopierkonstruktor und Zuweisungsoperator besteht darin, dass bei einer Zuweisung das Zielobjekt bereits existiert. Das heißt, das Zielobjekt hatte vor der Zuweisung bereits einen externen Datenbereich, der über seinen Zeiger zugreifbar war. Dieser Zeiger wird aber bei einer Bit-für-Bit-Kopie durch die Zuweisung überschrieben und zeigt anschließend auf den Datenbereich des Quellobjekts (...)  http://www.willemer.de/informatik/cpp/cppovrld.htm

0
Consta 
Fragesteller
 16.05.2011, 13:44
@Dory1

Ja hat mir beim Verständis geholfen! Der Unterschied wird jetzt deutlicher. Danke!

0
wolfgang1956  17.05.2011, 11:08

Unter einer Zuweisung versteht man etwas völlig anderes wie unter einem Konstruktor oder Copy-Konstruktor.

Die Zuweisung weist einem L-Wert das Ergebnis berechneter R-Werte zu.

Konstruktoren und Copy-Konstruktoren erzeugen neue Objekte!

0