c++ - 在 C++ 中,我应该总是使用虚拟继承?

  显示原文与译文双语对照的内容

中我看到这个条目:虚拟继承将添加到对象的内存占用。 除这里之外,在默认情况下仅使用虚拟继承是否存在缺陷,而且只有在需要时才有传统继承。 似乎会导致未来的证明类设计,但也许我丢失了一些缺陷。

时间: 原作者:

缺点是

  • 所有类都必须在所有时间初始化它的所有虚拟基( 比如 。 如果A 是B的虚基,而C 派生自B,则也必须初始化它本身。
  • 你必须在任何使用 static_cast ( 根据你的系统以及设计是否需要它,可能是问题,也可能不是问题)的地方使用更昂贵的dynamic_cast

Point 1,不值得它,因为你不能隐藏你的虚拟基础。 总是有更好的方法。

原作者:

在我的经验中,虚拟继承( 与虚方法相反。) 几乎不需要。 在 C++ 中,它用于解决 "钻石继承问题",如果你避免了多个继承实际上不可以能发生。

我非常确定我从来没有遇到 C++ 书外的虚拟继承,它包括我维护的代码和million+线系统。

原作者:
...