このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
MISRA C++:2008 Rule 12-1-1
An object's dynamic type shall not be used from the body of its constructor or destructor.
説明
ルール定義
An object's dynamic type shall not be used from the body of its constructor or destructor.
根拠
オブジェクトの動的な型は、その最上位の派生クラスの型です。次に例を示します。
struct B {
virtual ~B() {}
};
struct D: B {};
D d;
B* ptr = &d;*ptr が指すオブジェクトの動的な型は D です。これは、ポリモーフィック階層の最上位の派生クラスであるためです。ポリモーフィック オブジェクトの動的な型をそのコンストラクターまたはデストラクターで呼び出すと、最上位の派生オブジェクトの型ではなく、構築または破棄されたオブジェクトの型を取得する可能性があります。これは、構築中または破棄中に動的な型を呼び出す時点で、派生クラスがまだ構築されていない可能性があるためです。コンストラクターおよびデストラクターで動的な型を使用すると、予期しない動作が発生する可能性があります。コンストラクターおよびデストラクターからの純粋なバーチャル関数を呼び出すと、未定義の動作が発生します。オブジェクトのコンストラクターまたはデストラクターで、そのオブジェクトの動的な型を使用することを回避します。
Polyspace 実装
Polyspace® は、ポリモーフィック クラスのコンストラクターまたはデストラクターで以下の項目が使用されている場合に、これらの項目にフラグを設定します。
typeid演算子バーチャル関数または純粋なバーチャル関数
関数
dynamic_castまたは暗黙的な C スタイルのキャスト
Polyspace では、バーチャル メンバーを持つクラスはポリモーフィックであると想定されます。
トラブルシューティング
ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: Special Member Functions |
| カテゴリ: 必要 |
バージョン履歴
R2013b で導入