为多态基类声明virtual析构函数

来源:互联网 发布:homer仿真软件 编辑:程序博客网 时间:2024/05/17 08:36

为多态基类声明virtual析构函数(Declare destructors virtual in polymophic base classes.)

如果base class带有一个non-virtual析构函数,则当一个derived class经由base class指针删除的结果是为定义的,会造成对象的局部销毁:base class部分被销毁,而derived部分为被销毁。

无端的为class声明virtual析构函数,会增加对象的大小,是某些操作无法进行(主要是涉及内部细节的转换)。

只有当class内至少含有一个virtual函数时,才为他声明virtual析构函数。

不要集成任何没有virtual析构函数的classc++没有提供类似java的禁止派生的机制。

析构函数总是最深层次的析构函数被调用,然后才是base class的析构函数被调用。

base classes一个virtual析构函数,这个规则只适用于polymorphic(带多态性质)base classes身上。目的是通过base classes接口处理derived classes对象。

并发所有的baseclasses都被用来做多态用用途。非多态用途的base classes不需要virtual析构函数。

注意:

Ø      polyphonic(带多态性质的)base classes应该声明一个virtual析构函数。如果class带有任何virtual函数,则应该拥有一个virtual析构函数。

Ø      Classes的设计目的如果不是作为base class使用,或者不是为了多态性(polyphonically),就不应该声明virtual析构函数。