许河中学 邮政编码:菜鸟求助:关于C++ 对象赋值与拷贝的问题

来源:百度文库 编辑:中科新闻网 时间:2024/05/05 21:52:15
先看下面这段代码
#include <iostream>

using namespace std;

class Test
{
public:
int i;
public:
Test():i(10)
{
cout<<"构造"<<i<<"\n";
}
Test(const Test &t)
{
i=t.i+10;
cout<<"拷贝构造\n";
}
~Test()
{
cout<<"销毁"<<i<<"\n";
}

};

Test fn()
{
Test t;
return t;
}

void main()
{
Test t;
t=fn();
}

运行结果为:

构造10
构造10
拷贝构造
销毁10
销毁20
销毁20

请高手分析一下:构造的和销毁的分别是哪个对象?尤其是最后两个销毁的

设断点自己调试最清楚了。

构造10 ________main->t(old) _________//主函数Test t;
构造10 ________fn->t ________________//fn函数Test t;
拷贝构造 ______main->t(new) _________//t=fn();
销毁10 ________main->t(old) _________//主函数旧对象销毁
销毁20 ________fn->t ________________//fn函数临时变量销毁
销毁20 ________main->t(new) _________//主程序退出时t的销毁