Frage zum Zuweisungsoperator
-
Hallo, ich habe in meinem Buch gelesen, dass der Kopierkonstruktor aufgerufen wird wenn:
- er explizit zur Instanzbildung verwendet wird, d.h. Test obj1(obj2);
- ein Objekt mittels call by value übergeben wird, dann wird zum Erstellen des Objekts in der Funktion der Kopierkonstruktor verwendet
- ein Objekt nicht als Referenz zurückgegeben wird (return by value). Das Objekt, das zurückgegeben wird ist dann eine Kopie.Der Zuweisungsoperator hingegen wird beim Gleichsetzen aufgerufen (also die zugehörige Funktion), z.B.: Test obj1; Test obj2 = obj1; . In diesem Fall dürfte doch aber nicht der Kopierkonstruktor aufgerufen werden, das wäre ja auch doppelt gemoppelt oder? Komischerweise, wird bei mir in diesem Fall aber der Kopierkonstruktor aufgerufen ... Das dürfte doch nicht sein, oder? Ich meine wenn ich jetzt noch die Funktion für das = definiere, dann würde das Objekt ja zwei Mal konstruiert werden

Zusammenfassend: Warum wird bei Verwendung des Zuweisungsoperators der Kopierkonstruktor gestartet?
mfg Jessy
-
Bei der Definition "Test obj2 = obj1;" wird ein Objekt konstruiert, also muß dort ein Konstruktor aufgerufen werden (da das Objekt als Kopie angelegt wird, der Kopier-Konstruktor). Der Zuweisungs-Operator wird nur dann verwendet, wenn du einem bereits vorher existierenden Objekt einen (neuen) Wert zuweisen willst, wie in
Test obj1,obj2; obj2=obj1;.
-
Danke für die schnelle Antwort. Ich hätte mal vorher meinen Kopf einschalten sollen.
mfg Jessy
-
Test obj2 = obj1ist aequivalent zuTest obj2(obj1).
-
knivil schrieb:
Test obj2 = obj1ist aequivalent zuTest obj2(obj1).Jain. Da gibt's doch noch dieses "explicit" und die Tatsache, dass, falls obj1 kein Test-Objekt ist, der Kopierkonstruktor im ersten Fall vorhanden sein muss (auch wenn der Aufruf wegoptimiert wird).