为多态基类声明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析构函数的class。c++没有提供类似java的禁止派生的机制。
析构函数总是最深层次的析构函数被调用,然后才是base class的析构函数被调用。
给base classes一个virtual析构函数,这个规则只适用于polymorphic(带多态性质)base classes身上。目的是通过base classes接口处理derived classes对象。
并发所有的base classes都被用来做多态用用途。非多态用途的base classes不需要virtual析构函数。
注意:
<!--[if !supportLists]-->Ø <!--[endif]-->polyphonic(带多态性质的)base classes应该声明一个virtual析构函数。如果class带有任何virtual函数,则应该拥有一个virtual析构函数。
<!--[if !supportLists]-->Ø <!--[endif]-->Classes的设计目的如果不是作为base class使用,或者不是为了多态性(polyphonically),就不应该声明virtual析构函数。
本文探讨了在C++中为多态基类声明虚拟析构函数的重要性,解释了若基类的析构函数不是虚拟的,将如何导致派生类对象的部分销毁问题。同时介绍了何时应该为类添加虚拟析构函数,并强调了对于非多态用途的基类来说,不需要声明虚拟析构函数。
572

被折叠的 条评论
为什么被折叠?



