Effective C++笔记09:绝不在构造函数和析构过程中调用virtual 函数

来源:互联网 发布:java 常用算法函数 编辑:程序博客网 时间:2024/05/17 17:18

代码一
代码二
当创建BuyTransaction对象时,会首先调用基类的构造函数,而Transaction构造函数内部调用纯虚函数logTransaction。
这里会出现两个问题:
第一,logTransaction是虚函数,但是此处的调用是调用基类内部的函数,因为此时derived class对象尚未形成,derived class对象构造期间类型属于基类。
第二,基类中的纯虚函数没有定义则会出现连接错误。

对于析构函数也是如此,当derived class析构函数开始执行,对象内的derived class成员变量变呈现未定义值,此时derive class对象被当做base class对象对待。

那么如何做到Tranction继承体系上的对象被创建,有适当版本的logTransaction被调用呢?一种方案如下:
代码三
即改变logTransaction为非虚函数,要求derived class将必要的信息传递给Transaction构造函数

0 0
原创粉丝点击