メインコンテンツ

AUTOSAR C++14 Rule M10-1-1

Classes should not be derived from virtual bases.

説明

ルール定義

Classes should not be derived from virtual bases.

根拠

バーチャル基底クラスの使用は多くの紛らわしい動作につながる可能性があります。

たとえば、バーチャル基底クラスを含む継承階層では、最上位の派生クラスでバーチャル基底クラスのコンストラクターが呼び出されます。そのバーチャル基底コンストラクターの中間呼び出しは無視されます。

トラブルシューティング

ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

class Base {};
class Intermediate: public virtual Base {}; //Noncompliant
class Final: public Intermediate {};

この例では、ルール チェッカーは、Intermediate クラスが virtual キーワードを使用した Base クラスから派生するときに違反を報告しています。

次の動作は混乱の原因になる可能性があります。Final 型のオブジェクトを作成するとき、Final のコンストラクターは Base のコンストラクターを直接呼び出します。Intermediate のコンストラクターからの Base のコンストラクターの呼び出しは無視されます。この動作を考慮に入れていない場合、予期しない結果になる可能性があります。

チェック情報

グループ: 派生クラス
カテゴリ: Advisory、Automated

バージョン履歴

R2019a で導入