Не вызывается деструктор
Весь код:
#include <iostream>
using namespace std;
class MyClass
{
public:
int data;
MyClass(int data)
{
this->data = data;
cout << "Вызвался конструктор " << this << '\n';
}
~MyClass()
{
cout << "Вызвался деструктор " << this << '\n';
}
};
void Foo(MyClass value)
{
cout << "Вызвалась функция Foo " << '\n';
}
MyClass Foo2()
{
cout << "Вызвалась функция Foo2 " << '\n';
MyClass temp(2);
return temp;
}
int main()
{
setlocale(LC_ALL, "ru");
//MyClass a(1);
//Foo(a);
Foo2();
return 0;
}
В моменте в
return temp;
не вызывается второй деструктор как должно быть по словам автора одного программиста. Почему не вызывается второй деструктор?
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Дело оптимизатора — применить NVRO или нет.
Компилирую ваш код в VC++ 2019 с ключиками
/std:c++latest /O2 /Ot /Oi /Ox /Oy /Ob2
ну, т.е. полная оптимизация. На выходе:
Вызвалась функция Foo2
Вызвался конструктор 0000007982EFF920
Вызвался деструктор 0000007982EFF920
Теперь компилирую с
/std:c++latest /Od
и получаю
Вызвалась функция Foo2
Вызвался конструктор 000000E0FD0FF904
Вызвался деструктор 000000E0FD0FF904
Вызвался деструктор 000000E0FD0FF940
Думаю, дальше пояснять ничего не надо?
Кстати, если возвращать просто
MyClass Foo2()
{
cout << "Вызвалась функция Foo2 " << '\n';
return 2;
}
то конструктор-деструктор будут и при оптимизации.