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: 3215463758Kann 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.
-
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.