Функция C++ возвращает действительный объект "по ссылке" после уничтожения
Я использую компилятор Visual Studio 2010, и я пытаюсь понять вывод этой программы.
Код:
#include <iostream>
using namespace std;
class A
{
public:
int i;
A()
{
i=0; cout<<"constructing A..\n";
}
A(int a): i(a)
{
cout<<"constructing A with argument\n";
}
A(A& a)
{
i=a.i;
cout<<"copy constructor\n";
}
~A()
{
cout<<"destructing a: " << i << endl;
}
};
A& f(A b)
{
return A(25);
}
void main()
{
A m;
cout << "i = " << f(m).i << endl;
}
Выход:
построение A..
конструктор копирования
построение А с аргументом
разрушая: 25
разрушая: 0
я = 25
разрушая: 0
Насколько я понимаю, A(25) возвращается по ссылке, а затем уничтожается, так почему же он печатает значение i: 'i = 25'?
1 ответ
Программа имеет неопределенное поведение. Тем не менее вывод может быть таким, как вы ожидали, потому что память, занятая неживым объектом, может быть еще не перезаписана.