Effective C++读书笔记
--By Nathan.Yu 2007-11-15--
2 构造/析构/赋值运算(之三)
条款07:为多态基类声明virtual析构函数
问题:何时该声明virtual析构函数,何时不该这样做?
【要点摘录】C++明确指出,当derived
class对象经由一个base class指针被删除,而该base
class带着一个non-virtual析构函数,其结果未有定义——实际执行时常发生的是对象的derived成分没被销毁。造成“局部销毁”对象。消除这个问题的做法很简单:
给base class一个virtual析构函数。
任何class只要带有virtual函数都几乎确定应该也有一个virtual析构函数。
如果class不含virtual函数,通常表示它并不意图被用做一个base
class。当class不企图当作base
class,令其析构函数为virtual往往是个馊主意。
无端的将classes对析构函数声明为virtual,就像从未声明它们为virtual一样,都是错误的。许多人都心得是:
只有当class内至少含一个virtual函数,才为他声明virtual函数。
如果你曾经企图继承(作为多态继承,一般是public继承)一个标准容器或任何其他“带有non-virtual析构函数”的class,拒绝诱惑吧!(很不幸,C++没有提供类似Java的final
classes或C#的sealed
class那样的“禁止派生”机制)。
当你需要一个抽象类,但没有任何可用的pure virtual时(可能是其他的virtual函数都有默认实现),可以声明一个pure
virtual析构函数。因为,抽象类总是企图被当作一个base class来用,做为base
class就必须有个virtual析构函数,而pure virtual导致抽象类,因此可以声明一个pure
virtual析构函数,使其成为抽象类。但必须为这个pure virtual析构函数提供一份定义,否则会发生链接错误。因为在销毁派生对象时,最终会调用这个抽象类的析构函数。
“给base classes一个virtual析构函数”,这个规则只适用于带多态性质的base
classes身上。这种base classes的设计目的是为了用来“通过base
class接口处理derived class对象”。
并非所有的base class的设计目的都是为了多态用途的。某些类的设计目的是仅仅作为基类实现代码复用,但不是为了多态用途(它们没有任何virtual函数),由于它们不被设计用来“经由base
class接口处置derived class
对象”,因此它们不需要virtual析构函数。
请记住:
1、
polymorphic(带多态性质的)base
classes 应该声明一个virtual析构函数。如果class
带有任何virtual函数,它就应该拥有一个virtual析构函数。
2、
Classes的设计目的如果不是作为base
classes使用,或不是为了具备多态(polymorphically),就不该声明virtual析构函数。
分享到:
相关推荐
学生读书笔记共享-学生读书笔记共享系统-学生读书笔记共享系统源码-学生读书笔记共享管理系统-学生读书笔记共享管理系统java代码-学生读书笔记共享系统设计与实现-基于springboot的学生读书笔记共享系统-基于Web的...
学生读书笔记共享-学生读书笔记共享系统-学生读书笔记共享系统源码-学生读书笔记共享管理系统-学生读书笔记共享管理系统java代码-学生读书笔记共享系统设计与实现-基于springboot的学生读书笔记共享系统-基于Web的...
effective c++读书笔记和总结 effective c++读书笔记和总结
基于 STM32F407VET6 的 STM32 电机驱动学习笔记 本库的使用方法 本库是 STM32 电机驱动的笔记合集,适用于学习STM32的基础驱动后进行学习。 V1.0 版本停止更新,V2.0 继续更新并加入交流异步电机的驱动教程。 STM...
c/c++博客笔记pdf总结 c/c++博客笔记pdf总结 c/c++博客笔记pdf总结 c/c++博客笔记pdf总结 c/c++博客笔记pdf总结 c/c++博客笔记pdf总结 c/c++博客笔记pdf总结
嵌入式开发学习笔记 ( java - c/c++ :从入门到入门 ) 叙述了我从小白到入门过程中遇到的问题以及解决方法(2018更新版)。
effective C++读书笔记,effective C++读书笔记,effective C++读书笔记
C++笔记 --- 类与结构 博客园大牛
effective C++ 很好 很不错 最好的C++进阶资料
内容简介:有人说C++程序员可以分为两类,读过Effective C++的和没读过的。当您读过《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》之后,就获得了迅速提升自己C++功力的一个契机。
C++Primer中文第三版(C++从入门到精通)第一章的读书笔记,主要是C++程序、预处理器指示符、iostream库等的基础知识点读书笔记。
2024届求职-C++后端-学习笔记-操作系统、计算机网络、C++语言+算法 2024届求职-C++后端-学习笔记-操作系统、计算机网络、C++语言+算法 2024届求职-C++后端-学习笔记-操作系统、计算机网络、C++语言+算法 2024届求职-...
摘录了《Effective C++》 (Scott Meyers 著)中有参考价值的编写代码建议,方面阅读
Effective C++学习笔记 没有时间看Effictive C++书的人可以看看这个笔记 总结出了重点啊 适合有c++基础的人阅读