条款07:为多态基类声明 virtual 析构函数

2020-09-29  本文已影响0人  robotai

总结:

1、带多态性质的base classes 应该声明一个virtual 析构函数。如果class 带有任何 virtual 函数,就应该拥有一个 virtual 析构函数。

2、class 设计的目的不是为了作为基类使用,或是不是为了具备多态性,就不该声明 virtual 析构函数。

知识细节记录:

1、理解 factory 函数:返回一个 base class 指针,指向生成的派生类对象。

2、当派生类对象 经由一个 base class 指针被删除,如果 base class 是 non virtual 析构函数,派生类对象的派生类部分不会被删除干净,会造成局部销毁,资源泄露的问题。

3、当一个类 不是基类时,定义了 virtual 析构函数,会导致类对象占用更多的内存。

4、必须与虚函数指针 vptr 指出运行期间会被调用的具体的虚函数。需要查询虚函数表 vtbl.

5、如果一个 类不带虚析构函数,就不要去继承,这种类包括STL容器,如 vector list set 等。

6、析构函数工作原理:最深的派生类的析构函数最先被调用,然后是其每一个base class 的析构函数被调用。

7、定义一个抽象类,用于继承 virtual 析构函数。

class A {

..

public:

virtual ~A() = 0;  // pure virtual 析构函数

 };

A::~A() {}   //pure virtual 析构定义

上一篇下一篇

猜你喜欢

热点阅读