Ожидается 2 звонка деструктору, но получено только 1

Я изучал, как функция возвращает объект посредством возврата по значению. Итак, чтобы проверить теорию, я запустил простую программу, в которой была функция, возвращающая экземпляр myclass — пользовательский класс.

#include <iostream>
#include <cstdio>
using namespace std;

class myclass {
int i;
public:
void set_i(int n) { i=n; }
~myclass();
};

myclass f(int k); // return object of type myclass

int main()
{
f(20);
return 0;
}

myclass f(int k)
{
myclass x;
x.set_i(k);
return x;
}

myclass::~myclass() {
cout << "hello\n";
}

Я перегрузил деструктор, поместив в него оператор «привет» cout, чтобы я мог отслеживать, когда локальная копия объекта внутри функции, а также временный объект, созданный во время выполнения оператора возврата, были уничтожены.

Итак, меня ожидали 2 звонка деструктору; один для локальной копии функции объекта и один для временного объекта. Но вместо этого я получил только один!

Пожалуйста, поделитесь, почему моя программа не выдавала «привет» дважды.

Благодарю.

0

Решение

Это эффект оптимизация возвращаемого значения который исключает временный объект, созданный для хранения возвращаемого значения функции. Это оптимизирует вызовы конструктора избыточных копий и вызовов деструкторов.

4

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector