在C ++中,我应该几乎总是使用虚拟继承吗?

时间:2010-12-28 03:50:09

标签: c++ multiple-inheritance virtual-inheritance

我从this entry看到虚拟继承将sizeof(指针)添加到对象的内存占用空间。除此之外,默认情况下使用虚拟继承是否有任何缺点,只有在需要时才使用常规继承?这似乎会带来更具前瞻性的课堂设计,但也许我错过了一些陷阱。

2 个答案:

答案 0 :(得分:23)

缺点是

  1. 所有类都必须始终初始化其所有虚拟基础(例如,如果A是B的虚拟基础,而C从B派生,则它还必须初始化A本身。)
  2. 在使用dynamic_cast的任何地方,您都必须使用更昂贵的static_cast(可能是也可能不是问题,具体取决于您的系统以及您的设计是否需要它)。
  3. 单独的第1点使它不值得,因为你无法隐藏你的虚拟基地。几乎总有一种更好的方法。

答案 1 :(得分:13)

根据我的经验,几乎不需要虚拟继承(而不是虚拟方法)。在C ++中,它用于解决"diamond inheritance problem",如果你避免多重继承实际上不会发生。

我很确定我从未在C ++书籍之外遇到虚拟继承,其中包括我编写的代码和我维护的百万+行系统。