我在“C++入门”.But中学到了一些关于重载新的/删除的东西,我非常好奇:既然默认的新/删除是如此之好,我应该在什么时候重载它们?
发布于 2012-10-12 09:00:40
只有当你的类有特定的内存需求时,你才应该重载它们。例如,如果要确保从内存池中分配Foo
的所有实例。
除了这类事情之外,很少需要重载它们。
发布于 2012-10-12 09:13:32
在类级别,重载它们的通常原因是使用内存池。这通常只适用于动态分配很多的非常小的类;例如,图中的节点,其中池分配器可以显著提高局部性和分配/释放速度。
您还可以重载全局new和delete操作符,以使用特殊的分配器(比如从内存中的特定区域进行分配)。然而,这可能很棘手,因为没有办法在delete表达式中指定额外的参数。实际上,当您这样做时,您还必须替换非放置的new和delete操作符,并安排new操作符以某种方式存储查找正确deleter所需的信息。
当然,尽管不是重载,但出于调试目的(或者因为您有一些自定义的放置new/ delete ),您可以将全局new和delete运算符替换为用于收集有关分配和删除的信息的运算符。
您不应该对库中的全局new/delete执行任何操作。由于您所做的任何事情都需要替换非放置表单,因此在库中执行将存在冲突的风险(如果用户还需要在其主应用程序中执行此操作)。
发布于 2012-10-12 09:05:28
此外,如果您创建了一个自定义分配库,如TCMalloc,并且您希望程序中来自new
的所有分配都转到您的库中。
https://stackoverflow.com/questions/12855531
复制相似问题