Myślałem, że gdy funkcja zwraca obiekt na stosie do funkcji wywołującej, funkcja wywołująca otrzymuje kopię oryginalnego obiektu, ale destruktor pierwotnego obiektu jest wywoływany, gdy tylko stos się odwija. Ale w poniższym programie destruktor jest wywoływany tylko raz. Spodziewałem się, że zostanie wywołane dwa razy.Dlaczego destruktor nie jest wywoływany dla zwróconego obiektu z funkcji?
#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.
}
Ale "destruktor MyClass" jest drukowany tylko raz. Czy moje założenie jest błędne, czy coś tu się dzieje?
Dlaczego piszesz: "MyClass obj = MyClass();" ? "MyClass obj;" wszystko będzie dobrze. To nie jest java;). –
Tak, to z powodu programowania w Javie przed :) – Srikanth
@EvanTeran "_Dlaczego piszesz:" MyClass obj = MyClass(); "?" MyClass obj; "zrobi to samo dobrze" to są ** nie ** równoważny w ogóle. – curiousguy