C++ 虚析构函数
flyfish 2015-3-12
Effective C++ 条款07
为多态基类声明virtual析构函数
Declare destructors virtual in polymorphic base classes.
1 polymorphic(带多态性质的)base classes应该声明一个virtual析构函数。如果class带有任何virtual函数,它就应该拥有一个virtual析构函数。
2 Classes的设计目的如果不是作为base classes使用,或不是为了具备多态性(polymorphically),就不应该声明virtual析构函数。
理由:
C++中含有纯虚函数的类称为抽象类,它不能生成对象.只能用作一个基类,由派生类提供 纯虚函数
的实现。
如下 parent 是一个抽象基类,由派生类实现function.
class parent
{
parent();
~parent();
virtual void function()=0;
}
class child: public parent
{
child();
~child();
void function();//抽象基类的函数实现
}
调用
parent* p=new child();
delete p;
这时候 delete 操作只调用~parent();
,而不是子类的~child();
所以需要将父类的析构函数声明为虚析构函数 virtual ~parent();
上面的delete 才会调用子类的~child();