Ich dachte, dass, wenn eine Funktion ein Objekt auf dem Stapel an die aufrufende Funktion zurückgibt, die aufrufende Funktion eine Kopie des ursprünglichen Objekts erhält, aber der Destruktor des ursprünglichen Objekts aufgerufen wird, sobald der Stapel abwickelt. Aber im folgenden Programm wird der Destruktor nur einmal aufgerufen. Ich habe erwartet, dass es zweimal angerufen wird.Warum wird der Destruktor nicht für das zurückgegebene Objekt von der Funktion aufgerufen?
#include <iostream>
class MyClass
{
public:
~MyClass() { std::cout << "destructor of MyClass" << std::endl; }
};
MyClass getMyClass()
{
MyClass obj = MyClass();
return obj; // dtor call for obj here?
}
int main()
{
MyClass myobj = getMyClass();
return 0; // Another dtor call for myobj.
}
Aber "destructor von MyClass" wird nur einmal gedruckt. Ist meine Annahme falsch oder geht hier etwas anderes vor?
Warum schreiben Sie: "MyClass obj = MyClass();" ? "Meine Klasse obj;" geht es gut. Das ist nicht Java;). –
Ja, es ist wegen der vielen Programmierung in Java vorher :) – Srikanth
@EvanTeran "_Warum schreibst du:" MyClass obj = MyClass(); "?" MyClass obj; "wird es gut machen_" das sind ** nicht ** gleichwertig im Allgemeinen. – curiousguy