虚析构函数
为什么需要虚析构函数? 可能通过基类指针删除派生类对象,换句话讲,就是避免派生类可能发生的内存泄漏。
我认为,如果你在类中定义了成员指针,那就需要申请获得内存,因此会有析构函数去释放内存。如果不写虚析构函数,用基类定义一个继承的派生类对象,去调用成员函数,编译器就会只调用基类的成员函数,派生类的成员指针就被忽视释放地址。
资料这么说:如果你打算允许其他人通过基类指针调用对象的析构函数(通过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();