MISRA C++:2023 Rule 21.6.4
If a project defines either a sized or unsized version of a global operator delete, then both shall be defined
R2024b 以降
説明
ルール定義
If a project defines either a sized or unsized version of a global operator delete, then both shall be defined. 1
根拠
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® から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。
例
チェック情報
| グループ: 言語サポート ライブラリ |
| カテゴリ: 必要 |
バージョン履歴
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.