C++ 虚析构函数

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();


你可能感兴趣的:(C++ 虚析构函数)