Item 9 避免在ctor和dtor中调用虚函数

来源:互联网 发布:linux打开sqlplus 编辑:程序博客网 时间:2024/05/16 05:18

看下面的程序有什么问题。

 

 

在基类的构造过程中,虚函数调用不会被传递到派生类中。因为基类的ctor是在派生类之前执行的,这时其数据成员还没有被初始化,即,派生对象还不存在!所以C++拒绝这样做。
不止虚函数,使用到RTTI的部分(dynamic_cast和typeid),在基类的ctor里,都不会被解析成派生类。
ctor和dtor同样。
一些编译器会对此给出警告。

 

● 注意,还有一种隐藏版本:

 

 

● 如果非要在基类里实现这样的功能,怎么办?下面是一种办法。