【发布时间】:2012-07-31 04:34:49
【问题描述】:
我在 Solaris 中运行的代码上运行了 purify,它显示了很多内存泄漏。 但是我检查了代码,大多数泄漏似乎都是无效的。
例如,
文件 1.cpp
Obj* getMyObj()
{
Obj* obj = NULL;
if(condition)
{
obj = new Obj(); //Purify is reporting leak here
//Fill obj
}
...
return obj;
}
文件2.cpp
void myfunc()
{
Obj* myobj = getMyObj();
if(myobj == NULL)
return;
...
...
delete myobj; //The object is deleted here
}
即使对象在File2.cpp 中被正确销毁,为什么 purify 会在File1.cpp 中报告泄漏?
编辑
NULL 检查只是一个错字,我更正了。
【问题讨论】:
-
你展示了你所有的代码吗?这是一个工厂函数,您可以根据“条件”构建不同的对象吗?在这种情况下,Obj 类是否有虚拟析构函数?
-
@NiklasKarlsson - 这不是工厂函数。但是,Obj 类有一个虚拟析构函数。
标签: c++ delete-operator purify