Does Object Modification创建一个新对象
Does Object Modification Create a New Object?
我对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);
}
第2行中的原始对象在第3行中被修改了吗?(这意味着上面的代码是安全的)。还是在第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
语句正确地释放了它。
忽略语法错误…
所有ModifyObject代码所做的是创建一个新对象并返回它。它没有修改MyObject所指向的对象。
假设你指的是
MyClass MyClass::ModifyObject(int z) {
int a = z;
int b = z;
return MyClass(a, b);
}
等于
MyClass MyClass::ModifyObject(int z) {
return MyClass(z, z);
}
也可以是
*MyObject = MyClass (z, z) ;
如果您为MyClass定义了赋值操作符,则该类为。否则,它会进行二进制拷贝(通常是非常糟糕的事情)。
是的,在第3行中通过赋值修改了原始对象
相关文章:
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 从多个源构造一个对象,包括一个对象向量
- 为什么C++在将一个对象复制到另一个对象时需要对这两个对象进行低级常量限定
- 检查哪个对象调用了另一个对象的对象方法
- C++ 如何在将新对象分配给另一个对象时创建新对象
- 如何处理从一个对象传递到另一个在C++中具有公共抽象类的对象的消息
- 我有一个对象,它将在整个程序的持续时间内实例化,但一个类成员不会,我应该动态分配它吗?
- 包装一个对象并假装它是一个 int
- 为什么我可以在不重载 "=" 运算符的情况下将一个对象分配给另一个对象?
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- 如何使用函数将一个对象的输入复制到另一个对象中
- 选择一个元素而不是一个对象的数组的原因
- 为什么我可以使用 memcpy 将一个对象变量复制到另一个对象变量
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- 我重载了 << 和 = 运算符。为什么当我将一个对象分配给另一个对象并尝试打印它时,我会被打印出来?
- 打印对象的映射,其中另一个对象作为键
- 如何通过另一个对象中的命令正确地从一个对象返回数据
- 为什么将两个对象分配给另一个对象后,两个对象不一样?
- 绘制一个对象,比较模具缓冲区的两个不同值