gpt4 book ai didi

c++ - 对象修改是否创建新对象?

转载 作者:搜寻专家 更新时间:2023-10-31 00:14:09 25 4
gpt4 key购买 nike

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

MyClass * MyObject;
MyObject= new MyClass(x, y);
*MyObject= MyObject-> ModifyObject(z);
delete MyObject;

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

编辑:这是 ModifyObject(z) 的示例

MyClass MyClass::ModifyObject(int z) {
int a = z;
int b = z;
return MyClass(a, b);
}

最佳答案

Did the original object from line 2 simply get modified in line 3? (Which means that the above code is safe). Or was a second object created in line 3

实际上,两者都是。但这不是泄漏。而这一切都取决于 ModifyObject

的不寻常实现

这段代码

MyClass MyClass::ModifyObject(z) {
int a = z;
int b = z;
return MyClass(a, b);
}

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

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

所以在那之后,仍然只有一个对象是通过 new 分配的,而你的 MyObject 指针仍然指向它。所以 delete 语句正确地释放了它。

关于c++ - 对象修改是否创建新对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24197040/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com