このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
MISRA C++:2023 Rule 21.6.5
説明
ルール定義
A pointer to an incomplete class type shall not be deleted. 1
根拠
不完全なクラスを指すポインターを削除すると、そのクラスに含まれている可能性のある非トリビアル デストラクターを呼び出せなくなります。デストラクターでメモリ割り当て解除などのクリーンアップ アクティビティを実行している場合、これらのアクティビティが発生しません。
同様の問題は、たとえば、不完全なクラスを指すポインターにダウンキャストする場合に発生します (ダウンキャストとは、基底クラスを指すポインターから派生クラスを指すポインターにキャストすることです)。ダウンキャストの時点では、基底クラスと派生クラスの関係は不明です。特に、派生クラスが複数のクラスから継承している場合、ダウンキャストの時点ではこの情報を利用できません。ダウンキャストでは多重継承に必要な調整を加えることができず、その結果のポインターはデリファレンスできません。
Polyspace 実装
チェッカーは、不完全なクラスを指すポインターが削除またはキャストされている状況にフラグを設定します。不完全なクラスとは、そのクラスが使用される時点でその定義が可視になっていないポインターのことです。
たとえば、クラス Body
の定義は、delete
演算子が Body
のポインターに対して呼び出されたときには可視ではありません。
class Handle { class Body *impl; public: ~Handle() { delete impl; } // ... };
トラブルシューティング
ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
グループ: 言語サポート ライブラリ |
カテゴリ: 必要 |
バージョン履歴
R2024b で導入
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.