函数返回一个类对象,用该对象创建另一个对象。结果有点意外
- C/C++ code
class Exmpl{public: Exmpl(){cout<<"Exmpl()"<<endl;} Exmpl(const Exmpl&){cout<<"Exmpl(const Exmpl&)"<<endl;} Exmpl& operator=(const Exmpl& rhs) { cout<<"operator=(const Exmpl& rhs"<<endl; return *this; } ~Exmpl(){cout<<"~Exmpl()"<<endl;}};Exmpl getE(){ return Exmpl();}Exmpl e2 = getE();
运行最后一句,为什么只输出“Exmpl()”?我以为程序会这样运行:在getE函数里,创建一个局部Exmpl对象,然后返回这个局部对象的副本,然后用复制构造函数创建返回值副本的Exmpl对象,然后再析构返回值副本对象。这样程序就应该输出:
Exmpl()
Exmpl(const Exmpl&)
~Exmpl()
[解决办法]
返回值优化
[解决办法]
编译器优化了。
你将getE()改成下面这样试试:
- C/C++ code
Exmpl getE(){ Exmpl a; return a;}