尽管使用静态unique_ptr调用析构函数,但内存泄漏
Memory leak despite destructor call using 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
被销毁,这将调用测试析构函数。
但是_CrtDumpMemoryLeaks向我展示了S::te.get()
内存位置的内存泄漏,该位置是指向(已破坏的(测试对象的指针。
我不理解这种行为。
我不能使用静态unique_ptr
吗?尽管析构函数是由unique_ptr
实现调用的,但为什么会出现泄漏?
如果您尝试在静态销毁发生之前检查泄漏,则会发生这种情况。
要解决此问题,您可以在应用程序开始时调用带有_CRTDBG_LEAK_CHECK_DF
的_CrtSetDbgFlag;它将在静态销毁后在退出时自动调用_CrtDumpMemoryLeaks
。
相关文章:
- 析构函数调用
- 在具有向量的类构造函数中进行析构函数调用
- 从 c++ 中派生类的析构函数调用虚函数
- C++析构函数调用两次,堆栈分配的复合对象
- C++ 在析构函数调用之前删除的动态成员数组
- 析构函数调用c++中的一个向量
- Singleton模式中的手动析构函数调用:调用多次
- 从内部类的析构函数调用虚拟函数
- 与 boost odeint 集成期间的析构函数调用
- 堆栈展开如何与析构函数调用有关?
- C++:优化析构函数调用
- 以逗号分隔的表达式中的析构函数调用
- GCC 9.1 返回 void& 作为显式析构函数调用的结果类型。这是一个错误吗?
- 从C++中的虚拟析构函数调用虚拟方法
- 从指针返回对象时出现意外的析构函数调用
- 使用 decltype 显式析构函数调用
- C++析构函数调用了错误的对象
- 了解虚拟函数和析构函数调用
- 多重继承析构函数调用他自己和父析构函数?c++
- 析构函数调用表单不适当的库