您的位置:首页 > 编程语言 > C语言/C++

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构造函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  effective-c++
相关文章推荐