C++ 虚析构函数

牧云@^-^@ 提交于 2019-11-26 06:03:27
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();


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!