在一本书中,我偶然发现,“当一个函数返回一个对象时,会自动创建一个保存返回值的临时对象。该对象实际上是由函数返回的。被归还后,这个物体被摧毁了。“
我无法完全理解这里所说的内容。
// Returning objects from a function.
#include <iostream>
using namespace std;
class myclass
{
int i;
public:
myclass()
{
cout << "constructing: " << i << endl;
}
~myclass()
{
cout << "destructing: " << i << endl;
}
void set_i(int n) { i=n; }
int get_i() { return i; }
};
myclass f(); // return object of type myclass
int main()
{
myclass o;
o = f();
cout << o.get_i() << "\n";
return 0;
}
myclass f()
{
myclass x;
x.set_i(1);
return x;
}
上述程序提供以下输出。
constructing: 0
constructing: 3935896
destructing: 1
1
destructing: 1
我的问题是:
当从f()返回“x”时,应该根据本书创建一个临时对象。但是,没有打印“构造:”,因为正在创建“x”的副本,因此调用构造函数是多余的(这是同样的原因,因为在将对象传递给函数时,只会调用其析构函数)
但是,当该临时对象被销毁时,为什么它的析构函数不被调用?