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