几个小时前,我一直在摆弄一个内存泄漏问题,结果我真的弄错了一些关于虚拟析构函数的基本知识!让我解释一下我的班级设计。
class Base
{
virtual push_elements()
{}
};
class Derived:public Base
{
vector<int> x;
public:
void push_elements(){
for(int i=0;i <5;i++)
x.push_back(i);
}
};
void main()
{
Base* b = new Derived();
b->push_elements();
delete b;
}
边界检查器工具报告了派生类向量中的内存泄漏。而且我发现析构函数不是虚拟的,并且没有调用派生类析构函数。当我将析构函数设为虚拟时,它出人意料地得到了修复。即使没有调用派生类析构函数,向量是否也不会自动释放?这是 BoundsChecker 工具中的一个怪癖还是我对虚拟析构函数的理解是错误的?