在C ++中重载全局运算符new / delete

时间:2009-03-12 17:34:39

标签: c++ operator-overloading

我正在尝试为全局运算符new重载并删除性能敏感的应用程序。我已经阅读了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

由于我第一次超载new和delete,我有几个问题。

我是否应该在包含“新”调用的所有文件中包含我的新标题Allocator.h(或Pre.h),其中包含重载的新函数?这很乏味。

或者我应该在每个翻译单元中使用包含Allocator.h(之前)的“gcc -include Allocator.h ...”?我希望尽可能保持代码平台的独立性。所有编译器都支持类似于“gcc -include”的东西吗?

2 个答案:

答案 0 :(得分:14)

如果您想重载全局operator newoperator delete,您只需要实现它。您不需要在任何地方明确定义它,因为它已经被定义为语言的一部分。

编辑:如果你想定义一个接受不同参数的operator new,那么你需要在任何地方#include它。但是你这样做取决于你;这主要是风格问题。

不要忘记实现全局operator new的所有变体并删除:newnew[]deletedelete[]和{{1}变种。

答案 1 :(得分:2)

如果您使用的是Visual Studio并使用预编译的标头,那么您可以将include抛入其中。我认为gcc也有某种形式的预编译头,这也会改善你的编译时间。