在下面的代码中,从func()返回a1时,我希望创建一个未命名的对象,但似乎并非如此。
#include <iostream>
using namespace std;
class A
{
public:
A(){ cout << "A ctor" <<endl;}
A(const A & a){cout << "A copy ctor" <<endl;}
A & operator = (const A & a){cout << "A assignment" <<endl; return *this;}
~A(){cout << "A dtor" <<endl;}
};
A func()
{
A a1;
return a1;
}
int main()
{
A a2 = func();
return 0;
}
上述代码的输出是:
A ctor
A dtor
P.S。在根据T.C.建议启用-fno-elide-constructors之后,调用2个拷贝构造函数。
A ctor
A copy ctor
A dtor
A copy ctor
A dtor
A dtor