虚析构函数
为什么需要虚析构函数? 可能通过基类指针删除派生类对象,换句话讲,就是避免派生类可能发生的内存泄漏。
我认为,如果你在类中定义了成员指针,那就需要申请获得内存,因此会有析构函数去释放内存。如果不写虚析构函数,用基类定义一个继承的派生类对象,去调用成员函数,编译器就会只调用基类的成员函数,派生类的成员指针就被忽视释放地址。
资料这么说:如果你打算允许其他人通过基类指针调用对象的析构函数(通过delete这样做是正常的),就需要让基类的析构函数成为虚函数,否则执行delete的结果是不确定的。
错误的实例代码
#include <iostream>using namespace std;class Base {public:~Base(); //不是虚函数};Base::~Base() {cout<< "Base destructor" << endl;}class Derived: public Base{public:Derived();~Derived(); //不是虚函数private:int *p;};#include <iostream>using namespace std;class Base {public:virtual ~Base();};Base::~Base() {cout<< "Base destructor" << endl;}class Derived: public Base{public:Derived();virtual ~Derived();private:int *p;};
第5行和13行更正后:
//虚函数virvual ~Derived();virvual ~Derived();
