我在why my local object destroyed twice?之前发布了一个类似的问题,但我对其他问题感到困惑。
这是程序:
class AT
{
public:
int a;
AT() { cout<<"construct"<<endl; }
AT(const AT& at) { cout<<"copy"<<endl; }
~AT() { cout<<"destroy"<<endl; }
};
AT func(AT at)
{
return at;
}
AT func2(AT at)
{
at.a = 5;
return at;
}
然后我打电话给:
AT at;
func2(func(at));
输出是:
construct
copy
copy
destroy
copy
destroy
destroy
我想输出中会有4个拷贝和4个破坏,我在func(at)中清楚,复制了参数,并且复制了返回值,并且两个都被破坏了。但是在func2()中,似乎没有复制参数。这是否意味着:如果将参数传递给参数,则不会复制参数?
答案 0 :(得分:2)
AT func(AT at)
{
return at;
}
可能是一些编译器优化。
At不会被创建,只会在之后被销毁。 相反,func的参数用于直接创建func2的参数,就像调用了func2(at);