我从this entry看到虚拟继承将sizeof(指针)添加到对象的内存占用空间。除此之外,默认情况下使用虚拟继承是否有任何缺点,只有在需要时才使用常规继承?这似乎会带来更具前瞻性的课堂设计,但也许我错过了一些陷阱。
答案 0 :(得分:23)
缺点是
dynamic_cast
的任何地方,您都必须使用更昂贵的static_cast
(可能是也可能不是问题,具体取决于您的系统以及您的设计是否需要它)。单独的第1点使它不值得,因为你无法隐藏你的虚拟基地。几乎总有一种更好的方法。
答案 1 :(得分:13)
根据我的经验,几乎不需要虚拟继承(而不是虚拟方法)。在C ++中,它用于解决"diamond inheritance problem",如果你避免多重继承实际上不会发生。
我很确定我从未在C ++书籍之外遇到虚拟继承,其中包括我编写的代码和我维护的百万+行系统。