Effective C++ 学习笔记(6)
来源:互联网 发布:如何用js判断是否闰年 编辑:程序博客网 时间:2024/06/02 17:29
Term 09: Never call virtual functions during construction or destruction.
不要在构造函数和析构函数内直接或间接调用虚函数,这时的虚函数不具备多态特性。存在一种场景,我们希望在基类的构造函数中针对不同的派生类实现有区别的构造。但如果在这里调用虚函数,那么派生类的对象在构造的时候先调用了这个基类的构造函数。由于派生类的构造函数并没有调用,因此调用派生类的方法存在着使用未初始化的派生类成员变量的危险。对于编译器而言,这种情况是不可接受的,因此选择在构造函数内将虚函数静态链接,不承认其动态特性。因此,在构造函数内调用的虚函数都不是真正的虚函数。
对于析构函数而言,有类似的情况。基类的析构函数调用时派生类的析构已经调用过,成员已销毁,因此调用的虚函数也不是真正的虚函数。
如果依然坚持想要在基类构造函数内针对不同的派生类对象执行不同的逻辑,可以由派生类构造函数传递不同的参数给基类的构造函数,从而基类可以根据不同的派生类构造函数执行不同的逻辑。如下:
<pre name="code" class="cpp">class CBase{ CBase(int nID);};CBase::CBase(int nID){ switch(nID) { case 1: ... break; case 2: ... break; default: break; }};class CDerived1: public CBase{ CDerived1():CBase(1);};class CDerived2: public CBase{ CDerived2():CBase(2);};
0 0
- 《Effective C++》学习笔记
- 《Effective C++》学习笔记
- 《Effective C++》学习笔记
- 《Effective C++》学习笔记
- 《Effective C++》学习笔记(1)
- 《Effective C++》学习笔记(一)
- 《Effective C++》学习笔记(二)
- 《Effective C++》学习笔记(三)
- 《Effective C++》学习笔记(四)
- 《Effective C++》学习笔记(五)
- 《Effective C++》学习笔记(六)
- 《Effective C++》学习笔记(七)
- 《Effective C++》学习笔记(八)
- Effective Objective-C 学习笔记(一)
- 《effective c++》学习笔记(一)
- 《effective c++》学习笔记(二)
- 《effective c++》学习笔记(三)
- 《effective c++》学习笔记(四)
- Linux 技巧:让进程在后台可靠运行的几种方法
- poj 1422 Air Raid
- cin、cin.get()、cin.getline()、getline()、gets()等函数的用法
- 碰到斑马打印机下载字体问题
- ScrollView嵌套ViewPager 时候 Pager左右滑动不流畅
- Effective C++ 学习笔记(6)
- 第12周-多继承、虚基类,继承和组合-项目4-点、圆的关系(2)
- iOS实现无限后台background的方法
- Android的ToggleButton和Switch以及AnalogColok和DigitalColok的用法-android学习之旅(二十)
- emacs 基本概念与基本操作
- 基于树莓派的门禁系统
- 理解G1垃圾收集器日志
- 分享:5个解决方法帮助你的团队高效运作
- fastjson转bean和集合的实用方法