【发布时间】:2011-08-30 01:33:06
【问题描述】:
我在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() 中,似乎没有复制参数。这是否意味着:如果将返回值传递给参数,则不会复制参数?
【问题讨论】:
标签: c++ pass-by-value