簡體   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