仮想継承は、複数の継承シナリオにおける「ダイヤモンド問題」に対処するために使用されるC++のテクニックです。この問題は、あるクラスが、両方とも共通の基底クラスを持つ2つのクラスから継承する場合に発生します。仮想継承がない場合、派生クラスは基底クラスのメンバのコピーを2つ持つことになり、曖昧さにつながります。class B : public virtual A のような仮想継承を使用することで、B と C の両方から継承する派生クラス D は、基底クラス A のインスタンスを1つだけ持つことになります。これにより、A のメンバの統一されたコピーにアクセスできるようになります。ただし、仮想継承は、曖昧さに遭遇するさらに派生したクラスが存在する場合にのみ効果を発揮します。Mandy の同僚は、不要な場合でさえ仮想継承を使いすぎています。例えば、final クラス SomeSpecificDerivedClass に public virtual SomeBaseClass を指定しても、実質的な利点はありません。final クラスは継承できないため、仮想継承の宣言は冗長になります。したがって、Mandy の同僚が行っているように、すべての状況で仮想継承をデフォルトで使用することは、多くの場合、非効率的で不要なプラクティスです。
class B : public virtual Aのような仮想継承を使用することで、BとCの両方から継承する派生クラスDは、基底クラスAのインスタンスを1つだけ持つことになります。これにより、Aのメンバの統一されたコピーにアクセスできるようになります。ただし、仮想継承は、曖昧さに遭遇するさらに派生したクラスが存在する場合にのみ効果を発揮します。Mandy の同僚は、不要な場合でさえ仮想継承を使いすぎています。例えば、finalクラスSomeSpecificDerivedClassにpublic virtual SomeBaseClassを指定しても、実質的な利点はありません。finalクラスは継承できないため、仮想継承の宣言は冗長になります。したがって、Mandy の同僚が行っているように、すべての状況で仮想継承をデフォルトで使用することは、多くの場合、非効率的で不要なプラクティスです。