繁体   English   中英

请用 C++ 解决这个内存泄漏问题

[英]please solve this memory leak problem in c++

class A
{
public:
    unique_ptr<int> m_pM;
    A() { m_pM = make_unique<int>(5); };
    ~A() { };
public:
    void loop() { while (1) {}; } // it means just activating some works. for simplifying
};

int main()
{
    _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);

    A a;
    a.loop(); // if i use force quit while activating this function, it causes memory leak

}


当我在激活此程序时使用强制退出时,有什么方法可以避免内存泄漏?

a.loop()是一个无限循环,因此之后的所有内容都无法访问,因此编译器有权在调用a.loop()之后删除所有代码。 请参阅编译器资源管理器以获取证明。

我相信在一些小众和非常罕见的场景之外,像你在这里写的那样真正的无限循环是非常无用的,因为它们的字面意思是“无限循环”。 那么编译器应该做什么呢? 从某种意义上说,它只是将您的对象的破坏推迟到未来的某个无限时间。 你通常做的是在这样的循环中使用break并在满足某些条件时中断。 一个简化的例子: https ://godbolt.org/z/sxr7eG4W1 在这里您可以看到反汇编中的 unique_ptr::default_delete 并且还可以看到编译器实际上正在检查循环内的条件。 注意: extern volatile 用于确保编译器不会优化掉标志,因为它是一个简化的示例,编译器足够聪明,可以确定标志没有改变。 在实际代码中,我建议不要使用 volatile。 只需检查停止条件。 而已。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM