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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (41)

我从本条目该虚拟继承为对象的内存占用增加了大小(指针)。除此之外,我在默认情况下是否使用虚拟继承,以及只有在需要时才使用常规继承?

提问于
用户回答回答于

根据我的经验,虚拟继承(相对于虚拟方法)几乎从来不需要。在C++中,它用于处理"diamond inheritance problem",如果你避免了多个继承,那么这种情况实际上就不会发生。

我非常肯定,我从未遇到过C++之外的虚拟继承,这包括我编写的代码和我维护的百万行系统。

用户回答回答于

缺点是这样的

  1. 所有类都必须始终初始化其所有的虚拟基础(例如,如果A是B的虚拟基础,并且C从B派生,那么它也必须自己初始化A)。
  2. 你必须使用更占用更大的dynamic_cast地方,你使用a static_cast(可能会也可能不是问题,这取决于你的系统,以及你的设计是否需要它)。

仅仅点1就不值得,因为你不能隐藏你的虚拟基地。

扫码关注云+社区

领取腾讯云代金券