【发布时间】:2019-08-15 07:06:59
【问题描述】:
如果我写:
b = new int;
b = new int;
delete b;
我知道delete b; 只会从内存中删除第二个b。由于删除后没有任何内容指向第一个b,因此存在内存泄漏。
在这种情况下,我知道有一种方法可以在 C# 和 Java 中恢复这种泄漏。有没有办法在 C++ 中恢复这种内存泄漏?
【问题讨论】:
-
在遵守标准 C++ 时不会。一旦你失去了对动态分配的最后一个引用,你就完蛋了。
-
@user4581301 我明白了。谢谢。
-
不用担心。要点是避免原始动态分配。使用containers 和smart pointers 为您处理内存。如果不能,请使用RAII 包装分配并观察Rule of Three or Five。
-
删除“第二个
b”并不是导致“第一个b”泄露的原因。b = new int的第二个赋值是做什么的,不管后面是否跟delete b。delete b只是释放第二个new表达式的结果。 -
@user4581301 对。我真的需要更适应使用智能指针。我想我的一位教授也谈到了它。
标签: c++ memory memory-leaks heap-memory dynamic-memory-allocation