Effective C++笔记09:绝不在构造函数和析构过程中调用virtual 函数
2017-04-12 19:02
387 查看
当创建BuyTransaction对象时,会首先调用基类的构造函数,而Transaction构造函数内部调用纯虚函数logTransaction。
这里会出现两个问题:
第一,logTransaction是虚函数,但是此处的调用是调用基类内部的函数,因为此时derived class对象尚未形成,derived class对象构造期间类型属于基类。
第二,基类中的纯虚函数没有定义则会出现连接错误。
对于析构函数也是如此,当derived class析构函数开始执行,对象内的derived class成员变量变呈现未定义值,此时derive class对象被当做base class对象对待。
那么如何做到Tranction继承体系上的对象被创建,有适当版本的logTransaction被调用呢?一种方案如下:
即改变logTransaction为非虚函数,要求derived class将必要的信息传递给Transaction构造函数
相关文章推荐
- 条款09:绝不在构造和析构过程中调用virtual 函数
- Rule9:绝不在构造和析构过程中调用Virtual函数
- 条款09:绝不在构造和西欧过程中调用virtual函数
- 条款09:绝不在构造和析构过程中调用virtual函数(Never call virtual functions during construction or destruction.)
- 条款09 绝不在构造和析构过程中调用 virtual 函数
- 条款9:绝不在构造和析构过程中调用virtual函数
- Effective c++学习笔记——条款09:绝不在构造和析构过程中调用virtual函数
- Effective c++学习笔记——条款09:绝不在构造和析构过程中调用virtual函数
- [Effective JavaScript 笔记]第18条:理解函数调用、方法调用及构造函数调用之间的不同
- 读书笔记《Effective C++》条款09:绝不在构造和析构过程中调用virtual函数
- 条款09:绝不在构造和析构过程中调用virtual函数
- 《Effective C++》读书笔记09:绝不在构造和析构过程中调用virtual函数
- 《Effect C++》学习------条款09:绝不在构造和析构过程中调用virtual函数
- 条款09:绝不在构造和析构过程中调用virtual函数
- 条款09:绝不在构造和析构过程中调用virtual函数
- Effective C++ 条款09 绝不在构造和析构过程中调用virtual函数
- Effective C++ -----条款09:绝不在构造和析构过程中调用virtual函数
- Effective C++_笔记_条款09_绝不在构造和析构过程中调用virtual函数
- 条款9:绝不在构造和析构过程中调用virtual函数(Never call virtual functions during construction or destruction)
- 条款09:绝不在构造和析构过程中调用virtual函数