Effective C++读书笔记(5) (二)

2014-11-24 12:20:03 · 作者: · 浏览: 1
生类的析构函数对 ~AWOV 的调用动作,所以你不得不为这个函数提供一份定义,不然连接器会发出抱怨。

为基类提供virtual析构函数的规则仅仅适用于 polymorphic(带多态性质的)基类上。这种基类的设计目的就是为了用来“通过基类接口处理派生类对象”。TimeKeeper 就是一个多态基类,因为即使我们只有类型为 TimeKeeper 的指针指向它们时,也期望能够操作 AtomicClock 和 WaterClock对象。

并非所有的基类的设计目的都是为了多态用途。例如,无论是标准 string还是 STL容器都不被设计成基类使用,更别提多态了。某些类虽然被设计用于基类,但并非用于多态用途。如Uncopyable 和标准库中的 input_iterator_tag,它们并非被设计用来“经由基类接口处理派生类对象”,因此不需要virtual析构函数。

· 不是设计用来作为基类或为了具备多态性的类,就不应该声明 virtual析构函数

摘自 pandawuwyj的专栏