C++ 单指针上的多个 new

标签 c++ memory-leaks

我很确定这是一个基本问题,但我无法在任何地方找到答案(可能是因为搜索词错误)。

以下代码是否会造成内存泄漏?

int * ptr= new int(15);
ptr= new int(25);

在对同一指针第二次调用 new 运算符之前,是否必须删除第一个指针?

最佳答案

实际上只是为了把事情弄清楚一点。
New 会给你一个来自堆的“随机”指针,唯一的保证是你可以将你请求的字节数放入你的指针指向的内存块中。

考虑以下几点:

int *x = new int; 指针 x 现在指向 0x12345678,那里有一个整数的位置,而且唯一获取此整数的方法是使用存储在指针 x 中的地址。

现在假设您再次调用 new。 x = new int; 0x12345678 的整数空间为您保留“保留”,但您的指针现在指向其他地方,例如指向 0x87654321为新整数创建一个新的“点”,并且指向前一个的指针将永远丢失,因为您的指针不再指向堆的原始部分。

这个问题的解决方案是在指针上调用 delete,这不会触及指针 x 本身,它只会从指针释放的堆中释放内存恰好指向。 (作为其直接结果,x 本身会发生变化,但这只是因为 new 会将值分配给它...)

现在您可以再次自由调用 new

(edit) 是的,new 确实会为您调用构造函数,但这不是这里的重点。

关于C++ 单指针上的多个 new,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10606870/

相关文章:

c++ - JUCE - 制作一个新窗口

c++ - C++ 中的 this->variable 和 namespace::class::variable 有什么区别?

.net - ASP.NET 网站内存使用率相当高

c - 这段代码中的 XS 内存泄漏?

c++ - 使用 make_unique 语句重新分配 unique_ptr 对象 - 内存泄漏?

python - wxpython 应用程序中严重的内存泄漏

c++ - Linux通过带有execl的脚本获取程序启动的pid

c++ - 函数(通过 std::move)返回的 unique_ptr 何时超出范围

c++ - CUDA 中的非事件线程与断言线程

c++ - Qt中删除QStringList