using namespace std;
typedef unsigned int DWORD;
class ReturnObject
{
public:
int i;
ReturnObject(){ cout << "Constructing " << (DWORD)this<<endl;}
ReturnObject(const ReturnObject &r){ cout << "Copy " <<(DWORD)this<<'\t'<<(DWORD)&r<<endl;}
ReturnObject & operator =( const ReturnObject &r){ cout << "Assign " <<(DWORD)this<<'\t'<<(DWORD)&r<<endl; return *this;}
~ReturnObject(){ cout << "Destructing " <<(DWORD)this<<endl;}
};
ReturnObject & test()
{
ReturnObject b ;b.i=1;
return b;
}
int main(int argc, char *argv[])
{
ReturnObject Ga=test();cout<<Ga.i<<endl;
return 0;
}
Constructing 2293164
Destructing 2293164
Copy2293288 2293164
304361816
Destructing 2293288
去掉引用 ,则结果如下:
ReturnObject test()
{
ReturnObject b ;b.i=1;
return b;
}
Constructing 2293288
1
Destructing 2293288
ReturnObject Ga=test();
与
ReturnObject Ga;
Ga=test();
差别较大。不考虑优化的情况下。
前者调用一次拷贝构造。
后者调用构造,以及赋值各一次
联系客服