グローバル New 演算子と Delete 演算子を効果的にオーバーライドする
問題:
グローバル New 演算子と Delete 演算子を置き換えるカスタム メモリ管理を使用するために削除演算子を使用すると、大規模なコードベースでは課題が生じます。オーバーロードを含むヘッダー ファイルをすべてのファイルに含めるのは現実的ではありません。これらのオーバーロードを確実に広く採用するにはどうすればよいでしょうか?
解決策:
new 演算子と delete 演算子のオーバーライドは、リンク時に実行されるプロセスです。演算子を定義する別の変換単位 (TU) を作成し、それをプロジェクトにリンクすると、既存のコードベースを変更せずにデフォルトの演算子をグローバルに置き換えることができます。
コード サンプル:
ここでは、new 演算子と delete 演算子を定義する TU の例を示します。
<code class="cpp">// optional_ops.cpp void * operator new(std::size_t n) throw(std::bad_alloc) { //... } void operator delete(void * p) throw() { //... }</code>
C 11 以降の代替:
C 11 decltype(sizeof(0)) を使用してサイズ パラメーターの型を決定する、新しいオーバーロードを定義する簡単な方法を紹介します:
<code class="cpp">void * operator new(decltype(sizeof(0)) n) noexcept(false) { //... }</code>
以上が大規模なコードベースでグローバルな「new」および「delete」演算子を普遍的にオーバーライドする方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。