尽管使用静态unique_ptr进行析构函数调用,但内存泄漏

Qwa*_*lly 4 c++ static memory-leaks unique-ptr

unique_ptr用作静态数据成员来保存指针.

struct Test
{
    int i;
    ~Test()
    {
        cout << "destructed" << endl;
    }
};

struct S
{
    static unique_ptr<Test> te;
};
unique_ptr<Test> S::te = unique_ptr<Test>(new Test());
Run Code Online (Sandbox Code Playgroud)

程序终止S::te被破坏,调用Test-destructor.

但_CrtDumpMemoryLeaks向我显示内存泄漏,其内存位置S::te.get()是指向(破坏的)Test对象的指针.

我不明白这种行为.

我不能用静电unique_ptr吗?尽管unique_ptr实现调用析构函数,为什么会出现泄漏?

Col*_*nee 6

如果您在静态破坏发生之前尝试检查泄漏,则会发生这种情况.

为了解决这个问题,你可以拨打_CrtSetDbgFlag_CRTDBG_LEAK_CHECK_DF在您的应用程序的开始; _CrtDumpMemoryLeaks静态销毁后,它会在退出时自动调用.