Standardkonstruktor
-
Moin,
Es gibt eine Klasse "Mensch". Und folgende Anweisung:
Mensch mensch1 = Mensch(); Mensch mensch2 = mensch1Den Zuweisungsoperator habe ich überladen. Wieso wird bei "mensch2 = mensch1" neben dem Zuweisungsoperator auch noch ein Konstruktor aufgerufen?
grus
-
Natürlich gehört bei der zweiten Anweisung noch ein Semikolon dazu.
-
Der Zuweisungsoperator hat mit der ganzen Sache überhaupt nichts zu tun. Generell gehen Initialisierungen der Form
foo bar = baz;durch den Kopierkonstruktor, und wenn baz nicht vom Typ foo ist, wird erst ein temporary des Typs foo erstellt und in das neue Objekt kopiert. Soweit jedenfalls die Theorie; in der Praxis wird die Kopie in der Regel wegoptimiert.
Der Zuweisungsoperator spielt erst eine Rolle, wenn die Objekte komplett konstruiert wurden. Etwa:
Mensch mensch1; // Default-Konstruktor Mensch mensch2 = mensch1; // Kopierkonstruktor mensch1 = mensch2; // Zuweisungsoperator