CERT.MEM.OVERRIDE.NEW
'new' に関する代替の動的ストレージ管理要件を順守します。
脆弱性とリスク
動的メモリ割り当てと割り当て解除の関数は、カスタム実装によってグローバルに代替できます。動的メモリ割り当てまたは割り当て解除の関数を代替するものは、代替された関数の適切な必須動作条項によって指定された意味的要件を満たす必要があります。
このチェッカーは、"new" の代替関数を探し、それらが noexcept で定義されていること、または関数本体に throw std::bad_alloc があることをチェックします。
軽減と防止
代替 "new" 関数は、割り当ての失敗時に std::bad_alloc をスローするか、noexcept で定義する必要があります。
例
コピー
void *operator new(std::size_t size) {
extern void *alloc_mem(std::size_t); // Implemented elsewhere; may return nullptr
return alloc_mem(size);
}
void *operator new[](std::size_t size) {
extern void *alloc_mem(std::size_t); // Implemented elsewhere; may return nullptr
return alloc_mem(size);
}
1 行目と 6 行目で違反が報告されます。