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