一个类的构造函数是不能被定义为虚函数的,但析构函数是可以被定义为虚析构函数的,定义为虚析构函数只需要在该类的析构函数上添加virtual关键字。
对于一个具有良好编程风格的驾驶员,其往往将基类的析构函数定义为虚函数。这是因为析构函数的作用是释放对象中动态分配的内存空间,达到销毁对象的目的。如果一个基类的析构函数定义为虚函数后,其派生类的析构函数也将自动定义为虚函数。那么,在实际应用的时候,系统将采用动态绑定的机制调用相应的析构函数,使析构函数更加彻底。
观察以下代码:
#include
using namespace std;
class Transprot
{
public:
virtual ~Transprot()
{
cout<<"in basic deconstructor"<<endl;
}
};
class Car:public Transprot
{
public:
Car(char *name)
{
pn=new char[50];
strcpy(pn,name);
cout<<pn<<endl;
}
~Car()
{
delete pn;
cout<<"in Car deconstructor"<<endl;
}
private:
char *pn;
};
void delclass(Transprot *pt)
{
if(pt!=0)
delete pt;
}
void main()
{
Car *pc=new Car("Bzen");
delclass(pc);
}
运行结果:
如果基类中析构函数中的virtual去掉,将不会显示红色标注内容,也就是不会运行基类中的析构函数。