我们为什么要重载/覆盖new和delete?

时间:2011-09-06 08:21:53

标签: c++ memory-management overloading new-operator

  

可能重复:
  Any reason to overload global new and delete?

我们为什么要在C ++中重载/覆盖new和delete?

举个例子,说明我们应该重载/覆盖new,new [],删除或删除[]。

2 个答案:

答案 0 :(得分:2)

这听起来有点像家庭作业。不过,这里有两个用途:

  • 用于剖析目的。例如,我们在库中使用它作为穷人的valgrind来跟踪内存泄漏。
  • 为对象实现自定义分配器(例如池分配器)。通常我会为此实现allocator

答案 1 :(得分:0)

提供分配/释放内存的实现。 new / delete非常通用。当您知道应用程序将如何使用内存时,您可以提供更高效的新/删除版本。例如,如果您使用了很多小对象,那将非常简单。

另一种用法是提供内存泄漏检测。

这不是经常使用的机制 - 至少在我的经验中。