グローバル演算子のオーバーライド: new 演算子と delete 演算子の置き換え
複雑なコードベースでは、カスタムの new 演算子と delete 演算子を一貫して使用することが困難な場合があります。問題の 1 つは、外部ライブラリと STL の使用によりカスタム メモリ管理がバイパスされる可能性があることです。
複数のファイルにオーバーロードを含める代わりに、グローバルな置換を実現できます。これらの演算子を定義する別の変換単位 (TU) をリンクします。この TU は次の機能を提供します。
<code class="cpp">void * operator new(std::size_t n) throw(std::bad_alloc); void operator delete(void * p) throw();</code>
を含む標準ライブラリ名を解決するには、または同様のヘッダーが必要になる場合があります。 C 11 以降では、decltype(sizeof(0)) で std::size_t を置き換えることができ、動的例外指定を省略できます。
<code class="cpp">void * operator new(decltype(sizeof(0)) n) noexcept(false);</code>
この TU をリンクすると、カスタムの new 演算子と delete 演算子が全体にわたってアクティブになります。このプログラムにより、一貫した使用と診断機能の向上が保証されます。
以上がC でグローバルな `new` および `delete` 演算子をオーバーライドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。