メインコンテンツ

AUTOSAR C++14 Rule M10-1-3

An accessible base class shall not be both virtual and nonvirtual in the same hierarchy.

説明

ルール定義

An accessible base class shall not be both virtual and nonvirtual in the same hierarchy.

根拠

チェッカーは、同じ派生クラス内において、同じクラスがバーチャル基底クラスとして継承されながら、非バーチャル基底クラスとしても継承されている状況にフラグを設定します。この状況はバーチャル継承の目的を台無しにするものであり、派生クラス オブジェクト内で基底クラスのサブオブジェクトのコピーが複数生じる原因になります。

トラブルシューティング

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

すべて展開する

class Base {};
class Intermediate1: virtual public Base {};
class Intermediate2: virtual public Base {};
class Intermediate3: public Base {};
class Final: public Intermediate1, Intermediate2, Intermediate3 {}; //Noncompliant

この例では、クラス Base が、バーチャル基底クラスおよび非バーチャル基底クラスとして Final 内で継承されています。Final のオブジェクトは、Base のサブオブジェクトのコピーを 2 つ以上含みます。

チェック情報

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

バージョン履歴

R2019a で導入