Interresantes verhalten bei fehlendem return.



  • Ich bin beim Programmieren und Testen über eine Sache gestolpert, dessen Grund mir nicht klar ist. Erstmal mein Programm:

    #include <iostream>
    using namespace std;
    
    class Test
    {
    public:
    	Test() {cout << "Konstruktor: " << (unsigned int)this << endl << flush; }
    	Test(const Test& t) { cout << "Kopier-Konstruktor: " << (unsigned int)this << endl << flush; }
    	~Test() {cout << "Destruktor: " << (unsigned int)this << endl << flush; }
    
    	Test func( Test& t ) {
    		//return t;
    	}
    };
    
    int main()
    {
    	Test t;
    	t = t.func(t);
    }
    

    Die Ausgabe des Programms sieht bei mir so aus:

    Konstruktor: 3215463758
    Destruktor: 3215463759
    Destruktor: 3215463758
    

    Kann mir einer erklären warum hier zwei mal der Destruktor ausgeführt wird? Und was ist das für ein Objekt? Es wird dafür ja kein Konstruktor aufgerufen.

    Ich danke allen Antwortenden.


  • Mod

    Undefiniertes Verhalten. Übrigens in dieser Form durchaus nicht unerwartet - func gibt ein temporäres Objekt zurück, dass am Ende des Ausdrucks, in dem der Funktionsaufruf steht, zerstört werden muss. Für die Konstruktion dieses Objektes ist return zuständig, und das fehlt hier.


Anmelden zum Antworten