C++ Local 对象超出范围返回一个指针(使用 new 分配的内存)。内存泄漏因此

C++ Local object goes out of scope returning a pointer (memory allocated using new). Memory leak because of this

此函数中报告了内存泄漏。我不明白为什么这没有释放内存?

示例代码:

void Somefunction(){
    Object1 * dangler = StaticClass::myFunc();
    /*...
      ...some processing using dangler
      ...*/
    delete dangler;
}

Object1* StaticClass::myFunc(){
    LocalObj lc;
    lc.another();
    return lc.get();
}

Class lc{
    Object1* m_dangler;
    void another(){
        m_danlger = new Object1();
    }
    Object1* get(){
        return m_danlger;
    }
}

这个 delete danlger; 不工作,我在 Object1 * dangler = StaticClass::myFunc();

看到内存泄漏

问题是: 1)为什么我的指针danlger确实指向该位置却无法删除。 2) 如果这不是释放内存的正确方法,我哪里出错了,正确的方法是什么?

规则非常简单:每个 new 必须与delete.

平衡

如果您的代码没有完全平衡这些,那么您有未定义的行为或内存泄漏。在你的情况下,逐行检查你的调试器是微不足道的。

lc class 的一个问题是可以复制它(使用编译器生成的复制构造函数),这将浅复制指针成员。很难跟踪哪个对象(如果有的话)"owns" 由 another.

分配的内存

您可以尝试完善此 class。但实际上,您也可以放弃整个事情并使用 std::unique_ptrstd::shared_ptr 来代替,具体取决于您的具体要求。那些 class 为您管理 delete 并且(除非您不正当使用它们)保证 newdelete 是平衡。