メインコンテンツ

MISRA C++:2008 Rule 10-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. 1

根拠

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

トラブルシューティング

ルール違反が想定されるものの、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 つ以上含みます。

チェック情報

グループ: Derived Classes
カテゴリ: 必要

バージョン履歴

R2013b で導入


1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.

The MISRA coding standards referenced in the Polyspace Bug Finder™ documentation are from the following MISRA standards:

  • MISRA C:2004

  • MISRA C:2012

  • MISRA C:2023

  • MISRA C++:2008

  • MISRA C++:2023

MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.