【问题标题】:Memory leak by local pointer inside C++ constructor bodyC++ 构造函数体内的本地指针导致内存泄漏
【发布时间】:2019-12-12 10:41:54
【问题描述】:

您好,有一个与此非常相似的代码

// Constructor
Foo() {
int * ptr = new int[100];
/* More Stuff */
}

这会导致内存泄漏,有什么方法可以删除 ptr 而不使其成为成员变量?

【问题讨论】:

  • 如果您想稍后将其删除,您必须将指针存储在某处。您还可以将其存储在全局变量中,将其添加到某个容器中,或类似的。
  • 这里为什么需要使用new?如果在编译时知道大小,则可以使用 std::array 代替(或纯 C 样式数组)。否则std::vector.
  • 我假设你不再需要构造函数后面的指针了?那为什么不直接删除呢?如果它真的是一个int[100] 数组,你也可以使用std::vector 来处理动态内存分配和释放。应避免使用new
  • 目前还不清楚您正在努力解决基本内存管理的哪一部分,以及以何种方式。你应该扩展你的问题。

标签: c++ pointers memory-leaks


【解决方案1】:

这就是你的做法。当你不再需要ptr 时,删除它:

delete[] ptr;

请务必查看deletedelete[] 之间的区别。 Here 是一个参考。

话虽如此,正确的做法TM 是使用std::unique_ptr。或者,如果您只需要一个动态大小的数组,请使用std::vector

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多