Standardkonstruktor



  • Moin,

    Es gibt eine Klasse "Mensch". Und folgende Anweisung:

    Mensch mensch1 = Mensch();
    Mensch mensch2 = mensch1
    

    Den 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
    

Anmelden zum Antworten