我正在为我们的内部使用开发一个框架,并且认为使所有继承虚拟化将避免从我的类继承的其他开发人员的钻石问题.
我环顾四周,发现很多关于在面对钻石问题时使用虚拟继承的讨论,但没有任何关于先发制人的讨论.
asc*_*ler 12
请记住,对于非虚拟继承,每个构造函数都只调用直接基类的构造函数.但是对于虚拟继承,派生类最多的类需要调用所有虚拟基类的构造函数.
如果你的基类需要初始化,虚拟继承将意味着树下的每个类都需要正确地初始化它.并且树中间的任何类都不能指望它自己的基类按照它想要的方式进行初始化.
正是我在标准中发现的:
static_cast如果涉及虚拟继承,则不能使用a 转换为派生类引用/指针.[expr.static.cast]/2,11this[new] 在[basic.life]/5,6 上重用存储.根据虚拟基类的实现,可能还有其他缺点.
| 归档时间: |
|
| 查看次数: |
502 次 |
| 最近记录: |