割り当て関数または割り当て解除関数のオーバーロードが見つかりません
割り当て関数と割り当て解除関数のペアのうち 1 つの関数のみをオーバーロード
説明
この欠陥は、operator new をオーバーロードしたが対応する operator delete をオーバーロードしていない場合 (またはその逆の場合) に発生します。
リスク
通常、空きストアのメモリの割り当てに加えて何らかのブックキーピングを実行するために operator new をオーバーロードします。対応する operator delete をオーバーロードしていない場合は、メモリの割り当てを解除するときに対応するブックキーピングを省略した可能性があります。
この欠陥もコーディング エラーを示す可能性があります。たとえば、operator new[] の配置形式をオーバーロードしたとします。
void *operator new[](std::size_t count, void *ptr);
operator delete[] の非配置形式を使用してしまう場合があります。void operator delete[](void *ptr);
void operator delete[](void *ptr, void *p );
修正方法
operator new をオーバーロードする際、対応する operator delete を同じスコープでオーバーロードしていることを確認します (その逆も同様)。
たとえば、あるクラス内で operator new の配置形式をオーバーロードするとします。
class MyClass {
void* operator new ( std::size_t count, void* ptr ){
...
}
};
operator delete の配置形式もオーバーロードしていることを確認します。class MyClass {
void operator delete ( void* ptr, void* place ){
...
}
};operator new に対応する operator delete を見つける方法については、operator new および operator delete のリファレンス ページを参照してください。
例
結果情報
| グループ: 適切な手法 |
| 言語: C++ |
| 既定値: オフ |
コマンド ライン構文: MISSING_OVERLOAD_NEW_DELETE_PAIR |
| 影響度: Low |
バージョン履歴
R2019a で導入