对象修改是否创建新对象?

Min*_*ker 2 c++ oop object delete-operator

我对C++中的对象生命周期有点困惑.假设我有以下代码.首先,我创建指针MyObject(第1行).然后我创建一个对象并将指针指向它(第2行).然后我修改对象,并将指针指向结果对象(第3行).最后,我删除了对象,以便避免内存泄漏(第4行).

MyClass * MyObject;
MyObject= new MyClass(x, y); 
*MyObject= MyObject-> ModifyObject(z);
delete MyObject;
Run Code Online (Sandbox Code Playgroud)

第2行的原始对象是否仅在第3行进行了修改?(这意味着上面的代码是安全的).或者是第3行创建的第二个对象,这意味着第2行的第一个对象永远不会被删除,从而造成内存泄漏?

编辑:这是ModifyObject(z)的样子

MyClass MyClass::ModifyObject(int z) {
    int a = z;
    int b = z;
    return MyClass(a, b);
}
Run Code Online (Sandbox Code Playgroud)

The*_*ish 5

第2行的原始对象是否仅在第3行进行了修改?(这意味着上面的代码是安全的).或者是第3行中创建的第二个对象

实际上,两者都有.但这不是泄漏.这一切都取决于那种不寻常的实施ModifyObject

这段代码

MyClass MyClass::ModifyObject(z) {
    int a = z;
    int b = z;
    return MyClass(a, b);
}
Run Code Online (Sandbox Code Playgroud)

不会修改它被调用的实例.相反,它创建一个单独的临时MyClass实例作为其返回值.(所以函数名称确实具有误导性.)

在行中使用该函数*MyObject = MyObject->ModifyObject(z);返回临时对象ModifyObject.然后*MyObject通过赋值运算符将其所有数据复制到引用的原始实例.然后临时自动销毁.

所以在那之后,仍然只有一个对象被分配通过new,你的MyObject指针仍然指向它.所以delete声明正确地解除了它.