2009-03-12 13 views
8

グローバル演算子のオーバーロードを高速化しようとしています。 http://www.informit.com/articles/article.aspx?p=30642&seqNum=3に記載されている懸念事項と、インテル®TBBのアロケータの使用に関する推奨事項をお読みになりました。http://www.intel.com/technology/itj/2007/v11i4/5-foundations/5-memory.htmグローバル演算子のオーバーロードC++での新規/削除

初めて新しいものを追加して削除していますので、いくつか質問があります。

"new"呼び出しを含むすべてのファイルにオーバーロードされた新しい関数を含む新しいヘッダーAllocator.h(またはPre.h)を含める必要がありますか?これは面倒です。

また、各翻訳単位にAllocator.h(以前)を含む "gcc -include Allocator.h ..."を使用する必要がありますか?コードプラットフォームを可能な限り独立させたいと思っています。すべてのコンパイラは "gcc -include"に類似したものをサポートしていますか?

答えて

14

グローバルoperator newoperator deleteをオーバーロードする場合は、実装する必要があります。すでに言語の一部として定義されているため、明示的に定義する必要はありません。

編集:異なるパラメータを取る演算子newを定義する場合は、#すべての場所に#includeする必要があります。しかし、それはあなた次第です。それは主にスタイルの問題です。

また、新しいグローバルオペレータのすべてのバリアントを実装し、削除することを忘れないでください:newnew[]deletedelete[]、およびstd::nothrow変種。

2

Visual Studioを使用し、プリコンパイル済みヘッダーを使用している場合は、そこにインクルードをスローすることができます。 gccにはヘッダのプリコンパイルもいくつかあると思います。コンパイル時間も改善されます。

関連する問題