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
析构函数
-----------------------------------------------------------------------------------------------------
求详细分析,是不是编 译器自己优化了,然后对外看不见其中真正的执行过程 展开
{
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
析构函数
-----------------------------------------------------------------------------------------------------
求详细分析,是不是编 译器自己优化了,然后对外看不见其中真正的执行过程 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询