为什么不能为这个C ++代码示例打印两次解构?

时间:2014-01-10 04:31:16

标签: c++ copy

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

1 个答案:

答案 0 :(得分:4)

编译器正在删除副本。因为它知道函数返回的对象只是初始化CopiedO的目的,所以它将两个对象合并为一个,你只能看到一个构造,一个破坏而没有复制构造。