AUTOSAR C++14 Rule A18-5-4
If a project has sized or unsized version of operator 'delete' globally defined, then both sized and unsized versions shall be defined
説明
ルール定義
プロジェクトでサイズ指定ありまたはサイズ指定なしのバージョンの演算子 'delete' がグローバルに定義されている場合は、サイズ指定ありとサイズ指定なしの両方のバージョンを定義するものとします。
根拠
C++14 規格ではサイズ指定ありバージョンの operator delete を定義しています。たとえば、次のシグネチャをもつサイズ指定なしの operator delete について考えます。
void operator delete (void* ptr);
void operator delete (void* ptr, std::size_t size);
operator delete の C++ リファレンス ページを参照してください。標準では、operator delete の両方のバージョンが存在する場合は、サイズ指定ありのバージョンを呼び出す必要があることになっています。これは、メモリ割り当てを解除するためのより効率的な方法が提供されるためです。ただし、不完全な型を削除するためなど、場合によっては、サイズ指定なしのバージョンを使用します。
サイズ指定なしのバージョンの operator delete をオーバーロードする場合、サイズ指定ありのバージョンもオーバーロードしなければなりません。通常、空きストアのメモリの割り当て解除に加えてブックキーピングを実行するために operator delete をオーバーロードします。サイズ指定なしのバージョンをオーバーロードして、サイズ指定ありのバージョンをオーバーロードしない (またはその逆の) 場合は、一方のバージョンで実行したブックキーピングがもう一方のバージョンでは行われません。この省略は予期しない結果につながる可能性があります。
Polyspace 実装
チェッカーは、サイズ指定なしのバージョンの operator delete が存在しているものの、対応するサイズ指定ありのバージョンが定義されていない (またはその逆の) 状況にフラグを設定します。
チェッカーは、C++14 以降の C++ バージョンを指定した場合にのみ有効になります。C++ 標準バージョン (-cpp-version) を参照してください。
トラブルシューティング
ルール違反が想定されるものの、Polyspace® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: 言語サポート ライブラリ |
| カテゴリ: Required、Automated |
バージョン履歴
R2019a で導入