C ++でのグローバル演算子new / deleteのオーバーロード
-
11-07-2019 - |
質問
グローバルオペレーターをオーバーロードして、パフォーマンスに敏感なアプリケーションの削除を試みています。 http://www.informit.comに記載されている懸念事項を読みました。 /articles/article.aspx?p=30642&seqNum=3 およびIntel TBBのアロケーターを使用するための推奨事項 http://www.intel.com/technology/itj/2007/v11i4/5-foundations/5-memory.htm
新規にオーバーロードして初めて削除するので、いくつか質問があります。
" new"を含むすべてのファイルに、オーバーロードされた新しい関数を含む新しいヘッダーAllocator.h(またはPre.h)を含める必要があります。電話?これは退屈です。
または" gcc -include Allocator.h ..."を使用する必要がありますAllocator.h(前)を各翻訳単位に含めますか?コードプラットフォームを可能な限り独立させたい。すべてのコンパイラは" gcc -include"に類似したものをサポートしていますか?
解決
グローバルな operator new
および operator delete
をオーバーロードする場合は、実装するだけです。すでに言語の一部として定義されているため、どこでも明示的に定義する必要はありません。
編集:異なるパラメーターを取る演算子newを定義する場合は、どこにでも#includeする必要があります。ただし、それはあなた次第です。それは主にスタイルの問題です。
そして、グローバル演算子newおよびdeleteのすべてのバリアントを実装することを忘れないでください: new
、 new []
、 delete
、< code> delete [] 、および std :: nothrow
バリアント。
他のヒント
Visual Studioを使用し、プリコンパイル済みヘッダーを使用している場合は、そこにインクルードをスローできます。 gccにはヘッダーのプリコンパイル形式もあると思うので、コンパイル時間も改善されます。