C++ 函数返回对象时,构造函数,拷贝构造函数,重载等号函数的调用情况。

classTest{private:intm_val;public:Test(intval):m_val(val){cout<<"构造函数"<<endl;}Test(){... class Test
{
private:
int m_val ;
public:
Test(int val ):m_val(val) {cout << "构造函数" << endl ;}
Test() {cout << "午餐的构造函数" << endl ;}
Test(const Test ©) ;
Test& operator= (const Test ©) ;
~Test() {cout << "析构函数" << endl ;}
};

Test::Test(const Test ©)
{
m_val = copy.m_val ;
cout << "拷贝构造函数" << endl ;
}

Test& Test::operator =(const Test ©)
{
if(this == ©)
{
return *this ;
}
this->m_val = copy.m_val ;
cout << "重载 = " <<endl ;
return *this ;
}
Test Fun()
{
Test t(1000) ;
cout << "3" <<endl ;
return t ;
}
int _tmain(int argc, _TCHAR* argv[])
{

cout << "1" <<endl ;
Test tt =Fun() ;
cout << "2" << endl ;

return 0;
}
vs2008输出的结果为:
1

构造函数
3
拷贝构造函数

析构函数
2
析构函数
我的理解为:
Fun函数,将对象t返回时,创建临时对象,调用拷贝构造函数,在main函数中,应该调用拷贝构造函数
我认为的输出为:
1

构造函数
3
拷贝构造函数

析构函数
拷贝构造函数 //main中
析构函数 //临时对象析构
2
析构函数
--------------------------------------------------------------------------------------------------------
在main中Test tt =Fun() ;修改为:
Test tt ;
tt = Fun() ;
输出的结构为:
1

构造函数
3
拷贝构造函数

析构函数
重载= //main中
析构函数 //临时对象析构
2
析构函数
-----------------------------------------------------------------------------------------------------
求详细分析,是不是编 译器自己优化了,然后对外看不见其中真正的执行过程
展开
 我来答
beddy1
2014-06-14 · TA获得超过1988个赞
知道大有可为答主
回答量:2271
采纳率:0%
帮助的人:2183万
展开全部
严格来说C++不能返回对象。对象的返回多是编译器让函数多传一个参数,然后将返回值复制到编译器加的参数中,函数返回后,再由这个临时的参数复制到结果变量中。
当然,如果编译器找到合适的优化方案的话就会优化。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式