【发布时间】:2011-05-20 17:00:18
【问题描述】:
我有一个返回本地对象的函数:
class AT
{
public:
AT() { cout<<"construct"<<endl; }
AT(const AT& at) { cout<<"copy"<<endl; }
~AT() { cout<<"destroy"<<endl; }
};
AT funcAt()
{
AT tmp;
return tmp;
}
...
funcAt();
输出是:
construct
copy
destroy
destroy
我想只有“tmp”的构造和销毁,那么为什么会有复制和另一个销毁呢?复制的对象在哪里?
【问题讨论】:
-
任何 C++ 对象都不能被销毁(或创建)两次。
-
如果您运行启用了优化的发布版本,我将保证输出更改。
-
@Neil:我敢打赌我可以创建和销毁同一个对象两次。 (作者:迂腐警察)
-
@Martin 你能两次(甚至一次)踏入同一条河流吗?如果是这样,请发布一个答案来证明它。
-
@Neil:创建一个普通对象。显式调用析构函数。然后调用placement new来重新初始化对象,然后当对象超出范围时将调用普通的析构函数。同一对象构造和销毁两次。
标签: c++ return-value