代表性作品:《未经雕琢的钻石》 笔记

代表性作品:《未经雕琢的钻石》

虚继承是 C++ 中用于解决多重继承场景下“菱形问题”的一种技术。当某个类从两个类继承,而这两个类又共同继承自一个基类时,就会出现该问题。若不使用虚继承,派生类中将包含基类成员的两个独立副本,从而导致歧义。通过使用虚继承(例如 class B : public virtual A),同时从 B 和 C 继承的派生类 D 将仅拥有一个基类 A 的实例,从而确保能够访问 A 成员的统一副本。然而,虚继承仅在存在进一步派生类且这些类会遇到歧义时才起作用。曼迪的一位同事过度使用虚继承,甚至在无需使用时也加以应用。例如,将一个 final 类 SomeSpecificDerivedClass 标记为 public virtual SomeBaseClass 并无实际益处,因为 final 类无法被继承,使得虚继承声明变得多余。因此,像曼迪的同事那样在所有情况下默认使用虚继承,往往是一种低效且不必要的做法。