我使用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}}实现调用的,但为什么会出现泄漏?
答案 0 :(得分:6)
如果您在静电销毁发生之前尝试检查泄漏,则会发生这种情况。
要解决此问题,您可以在应用程序开头使用_CRTDBG_LEAK_CHECK_DF
致电_CrtSetDbgFlag;在静态破坏后,它会在退出时自动调用_CrtDumpMemoryLeaks
。