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

时间:2013-11-21 21:29:26

标签: c++ memory-leaks static 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());

在程序终止时S::te被破坏,它会调用Test-destructor。

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

我不明白这种行为。

我不能使用静态unique_ptr吗?虽然析构函数是由{{1}}实现调用的,但为什么会出现泄漏?

1 个答案:

答案 0 :(得分:6)

如果您在静电销毁发生之前尝试检查泄漏,则会发生这种情况。

要解决此问题,您可以在应用程序开头使用_CRTDBG_LEAK_CHECK_DF致电_CrtSetDbgFlag;在静态破坏后,它会在退出时自动调用_CrtDumpMemoryLeaks