关于返回类对象时的匿名对象的问题
- C/C++ code
class TestClass1{public: TestClass1() { cout<<"default constructor"<<endl; } TestClass1(int i) { cout<<"specified constructor"<<endl; } ~TestClass1() { cout<<"~TestClass1()"<<endl; } TestClass1(const TestClass1& t) { cout<<"copy-con"<<endl; } TestClass1& operator = (const TestClass1 &t) { if( &t == this ) return *this; cout<<"operator = "<<endl; return *this; }};TestClass1 function1(TestClass1 tc){ return tc;}void main(){ TestClass1 tc1; TestClass1 tc2=function1(tc1); cout<<"=================="<<endl; TestClass1 tc3; tc3 = function1(tc1);}
输出情况是这样的:
copy-con
copy-con
~TestClass1()
=========================
default constructor
copy-con
copy-con
~TestClass1()
operator =
~TestClass1()
~TestClass1()
~TestClass1()
~TestClass1()
从结果看,为什么
TestClass1 tc2=function1(tc1);没有产生一个匿名对象,
而TestClass1 tc3;
tc3 = function1(tc1);会产生一个匿名对象呢?
是因为前者调用的是拷贝构造,后者调用赋值操作符吗?
[解决办法]
谷歌“返回值优化”