感谢大家,在整个项目中再次检查后,真正的问题是缺少虚拟目标...导致内存泄漏......
#include "stdafx.h"
#include <vector>
class VecContainerParent
{
public:
VecContainerParent(){};
没有这一行:
virtual ~VecContainerParent(){};
导致内存泄漏
};
class VecContainerChild : public VecContainerParent
{
public:
VecContainerChild(){};
//virtual ~VecContainerChild(){};
private:
std::vector<int> vec;
};
////////// WITH MEMORY LEAK ///////////////
int _tmain(int argc, _TCHAR* argv[])
{
VecContainerParent *a;
while(true)
{
a = new VecContainerChild();
delete a;
}
}
/////原帖////////// 我在类中使用向量时出现内存泄漏问题,然后将此对象与new&amp;删除。 似乎类中的向量不释放内存。 为了测试这个,我在任务管理器中看到过程的内存急剧增加。
请参阅以下示例:
class VecContainer
{
public:
VecContainer(){};
private:
std::vector<int> vec;
}
内存泄漏:
int main()
{
VecContainer *a;
while(true)
{
a = new VecContainer();
delete a;
}
}
好(因为不使用ptr):
int main()
{
while(true)
{
VecContainer a;
}
}
答案 0 :(得分:3)
这是典型的。当你
a = new VecContainerChild();
delete a;
通过指向其基类子对象的指针删除对象,调用未定义的行为,除非基类具有虚拟析构函数。基本上,在这种情况下,孩子的析构函数不会运行。