首先给出程序示例。如果利用指针删除派生类的对象时,该程序利用的是基类指针指向派生类的对象,因此只调用了基类的析构函数,派生类的析构函数将不会调用。
#include <iostream>
using namespace std;
class son
{
public:
~son(){ cout << "son"; };
};
class grandson :public son
{
public:
~grandson(){ cout << "grandson"; };
};
int main()
{
son * pson;
pson = new grandson;
delete pson;
return 0;
}
因此我们可以可用虚析构函数,先调用派生类的析构函数,然后调用基类的析构函数:
#include <iostream>
using namespace std;
class son
{
public:
virtual ~son(){ cout << "son"; };
};
class grandson :public son
{
public:
~grandson(){ cout << "grandson"; };
};
int main()
{
son * pson;
pson = new grandson;
delete pson;
return 0;
}