接口的钻石问题

Phi*_*ipp 0 c++ multiple-inheritance diamond-problem

我正在使用许多抽象类,它们只定义纯虚函数和虚拟(非纯)析构函数.

没有使用虚拟继承,是否仍然可以使用钻石继承结构?(我想确保即使某些程序员不知道他应该使用虚拟继承也没有问题.)什么是一个很好的资源,它提供了一个简短而完整的主题概述?

谢谢!

MSa*_*ers 5

你不能.没有虚拟继承,继承图只是不是钻石.如果Derived继承自LeftRight,并且两者都是非虚拟派生的Base,则Base每个Derived对象将有两个子对象.


Ele*_*tal 5

虚拟继承是获取钻石的机制 - 如果你不使用虚拟继承,那么你就可以使用两个不同的公共基类副本 - 这不再是钻石,可能不是你想要的.