这会导致记忆问题吗?
Does this cause memory problems?
假设我有以下内容:
Foo* foo = new Foo(bar);
//later on
*foo = Foo(anotherBar);
由于foo是在堆上分配的,这是否会导致问题,或者将临时foo的内存复制到堆上的foo的地址中?
谢谢
*foo = Foo(anotherBar);
与对Foo
类型对象的常规赋值没有什么不同。*foo
返回一个Foo类型的左值,你正在给它赋值。
简短的回答:它不会引起问题,临时将被复制到foo
所指向的堆Foo
对象。
只要记得在某个时候删除foo,就不会导致内存泄漏。
如果不能确定赋值操作符将做正确的事情,可以考虑在不释放内存的情况下手动删除和重建:
foo->~Foo();
foo = new (foo) Foo(anotherBar);
我当然不会推荐这样做,它既不直观又不优雅,但我认为我把它放在那里只是为了以防有人真的想避免delete
和单独的new
带来的重新分配和重新分配。
new
以支持资源管理容器是更可取的。
如果Foo
在堆上分配任何东西,它将不会被释放,因为第一个实例的析构函数将不会被调用。
两个对象在运行时使用同一个指针被创建。当它指向第二个内存位置时,我们没有办法访问第一个对象是为了将其释放回堆,因此内存泄漏。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- C++遗传,记忆问题
- 我的记忆动态规划算法有什么问题?
- 在使用SFML时,我会得到记忆或出于界限异常,这是什么问题
- 是记忆问题吗?C [代码块] [Windows]
- 有没有方法可以增加数组的记忆?和相关问题
- 我处理这件事的方式有记忆问题吗
- std::向量记忆问题
- 结合和记忆问题
- 我地图上的记忆问题在哪里?
- 向量的记忆行为问题
- 这会导致记忆问题吗?
- 另一个小记忆C++问题
- 简单的记忆问题练习
- 垫子结构和记忆的问题