繁体   English   中英

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

[英]Overloading global operator new/delete in C++

我正在尝试重载全局运算符new和删除性能敏感的应用程序。 我已经阅读了http://www.informit.com/articles/article.aspx?p=30642&seqNum=3中描述的问题以及使用英特尔TBB分配器的建议http://www.intel.com/technology/itj/ 2007 / v11i4 / 5-基金会/ 5-memory.htm

由于我第一次超载新的和删除,我有几个问题。

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

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

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

编辑:如果你想定义一个带有不同参数的operator new,那么你需要#include它到处都是。 但是你这样做取决于你; 这主要是风格问题。

并且不要忘记实现全局运算符new和delete的所有变体: newnew[]deletedelete[]std::nothrow变体。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM