gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:36:57 25 4
gpt4 key购买 nike

我使用 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 被析构,调用测试析构函数。

但是 _CrtDumpMemoryLeaks 向我显示了 S::te.get() 的内存位置上的内存泄漏,这是指向(已破坏的)测试对象的指针。

我不明白这种行为。

我不能使用静态unique_ptr吗?为什么在unique_ptr实现中调用了析构函数会出现泄漏?

最佳答案

如果您试图在静态破坏发生之前检查泄漏,就会发生这种情况。

要解决此问题,您可以调用 _CrtSetDbgFlag在应用程序的开头使用 _CRTDBG_LEAK_CHECK_DF;在静态销毁后,它将在退出时自动调用 _CrtDumpMemoryLeaks

关于c++ - 尽管使用静态 unique_ptr 进行析构函数调用,但内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20132297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com