在c++中,不能声明虚构造函数,但有虚析构函数。
语法是virtual ~类名();
先看一个程序
class Base
{
public:~Base(){cout<<“Base”;}
};
class Derived
{
public:~Derived(){cout<<“Derived”;}
};
void Fun(Base *b)
{
delete b;
}
int main()
{
Base *b=new Derived;
Fun(b);
return 0;
}
结果是Base。
这说明,通过基类指针删除派生类对象时调用的是基类的析构函数。
解决方法就是将虚构函数声明为虚析构函数:
class Base
{
public:
virtual ~Base();
};
事实上,只用将基类的虚析构函数声明为virtual即可。
这时,结果就是:
DerivedBase。