虚函数主要用于实现多态
而析构函数主要用于释放内存
所以虚析构函数主要用于在有多态的时候释放内存
(突然感觉理解的好肤浅,但是又很好理解了)
看看下面例子
class Base
{
public:
Base();
~Base();
private:
};
Base::Base()
{
}
Base::~Base()
{
cout << "Base::~Base" << endl;
}
class Demo : public Base
{
public:
Demo();
~Demo();
private:
};
Demo::Demo()
{
}
Demo::~Demo()
{
cout << "Demo::~Demo" << endl;
}
int main() {
Demo* DDemo = new Demo();
cout << "delete子类指针" << endl;
delete DDemo;
cout << endl;
Base* BBase = new Demo();
cout << "delete 父类指针" << endl;
delete BBase;
system("pause");
return 0;
}
其执行结果为
容易发现实现多态的时候只执行了基类的析构函数,并没有执行Demo的析构函数,所以容易造成内存泄漏
而将Base的析构函数改为虚函数
virtual ~Base();
则执行结果为
这下析构的可彻底了
暗示:
虚析构函数一般在需要实现多态的基类中才使用,当然为了保险起见可以每个类都是用,但是虚函数造成的开销就要你自己去报销了。