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)
第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声明正确地解除了它.