Я думал, что когда функция возвращает объект в стеке вызывающей функции, вызывающая функция получает копию исходного объекта, но деструктор исходного объекта вызывается, как только стек раскручивается. Но в следующей программе деструктор вызывается только один раз. Я ожидал, что он будет вызван дважды.
#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.
}
Но «деструктор MyClass» печатается только один раз. Мое предположение неверно или здесь что-то еще происходит?