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

jia*_*afu 5 c++ copy

using namespace std;

Object returnObject(){
    Object o;  
    return o;  //place A
 }

int main() {
    Object CopiedO=returnObject();  
    return 0;  //Place B
}
Run Code Online (Sandbox Code Playgroud)

对象定义是:

Object::Object() {
    cout<<"Object::Object"<<endl;
}

Object::~Object() {
    cout<<"Object::~Object"<<endl;
}

Object::Object(const Object& object) {
    cout<<"Object::CopyObject"<<endl;
}
Run Code Online (Sandbox Code Playgroud)

结果是:

/*Object::Object
Object::~Object*/
Run Code Online (Sandbox Code Playgroud)

据我所知,o和CopiedO都将被解构,但为什么只有一次打印Object ::〜Object?

我认为没有内联,复制的o是o的副本.但是它不能打印Object :: CopyObject

Dav*_*eas 4

编译器正在忽略副本。由于它知道函数返回的对象的唯一目的是初始化CopiedO,因此它将两个对象合并为一个,您将只看到一种构造,一种破坏,并且没有复制构造。