using namespace std;
Object returnObject(){
Object o;
return o; //place A
}
int main() {
Object CopiedO=returnObject();
return 0; //Place B
}
对象定义是:
Object::Object() {
cout<<"Object::Object"<<endl;
}
Object::~Object() {
cout<<"Object::~Object"<<endl;
}
Object::Object(const Object& object) {
cout<<"Object::CopyObject"<<endl;
}
结果是:
/*Object::Object
Object::~Object*/
据我了解,o和CopiedO都将被解构,但为什么只有一次打印Object ::〜Object?
我认为没有内联,复制的o是o的副本。但是它不能打印Object :: CopyObject
答案 0 :(得分:4)
编译器正在删除副本。因为它知道函数返回的对象只是初始化CopiedO
的目的,所以它将两个对象合并为一个,你只能看到一个构造,一个破坏而没有复制构造。