淘先锋技术网

首页 1 2 3 4 5 6 7
  • polymorphic(带多态性质的) base classes 应该声明一个 virtual 析构函数。如果 class 带有任何 virtual函数,它就应该拥有一个 virtual 析构函数
  • Classes 的设计目的如果不是作为 base classes 使用,或不是为了具备多态性(polymorphically),就不该声明 virtual 析构函数

当 derived class 对象经由一个 base class 指针被删除,且 base class 的析构函数不是虚函数,其结果未定义———实际执行时通常发生的是对象的 derived 成分没有被销毁(derived class 的析构函数未被调用)。造成一个诡异的“局部销毁”对象。

为抽象类的虚析构函数提供定义。

并非所有 base classes 的设计目的都是为了多态用途。如条款 6 的 Uncopyable 和标准程序库的input_iterator_tag 。它们并非被设计用来“经由 base class 接口处理 derived class 对象”,因此它们不需要virtual 析构函数。