当定义一个基类的指针定向子类的对象是, 在析构子类对象的时候,如果基类的构造函数不是虚函数的话,就不会调用子类的析构函数, 因此会造成内存泄漏。例子如下:
#include <iostream>
using namespace std;
class Base
{
public:
Base(){}
virtual ~Base(){
cout << "hello, I'm deleteing Base" << endl;
}
virtual void fun(){
cout << "hello, I'm Base" << endl;
}
};
class Derive : public Base
{
public:
Derive(){}
~Derive()
{
cout << "hello, I'm delteing Derive" << endl;;
}
virtual void fun() {
cout << "hello, I'm Derive" << endl;
}
};
int main()
{
Base *b = new Derive();
b->fun();
delete b;
}
将基类中的析构函数设置成虚函数以后。结果如下: