读书人

关于返回类对象时的匿名对象的有关问题

发布时间: 2012-04-10 21:03:56 作者: rapoo

关于返回类对象时的匿名对象的问题

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);会产生一个匿名对象呢?
是因为前者调用的是拷贝构造,后者调用赋值操作符吗?

[解决办法]
谷歌“返回值优化”

读书人网 >C++

热点推荐