首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我应该在什么时候重载C++中的新建/删除

我应该在什么时候重载C++中的新建/删除
EN

Stack Overflow用户
提问于 2012-10-12 08:57:39
回答 5查看 227关注 0票数 2

我在“C++入门”.But中学到了一些关于重载新的/删除的东西,我非常好奇:既然默认的新/删除是如此之好,我应该在什么时候重载它们?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-10-12 09:00:40

只有当你的类有特定的内存需求时,你才应该重载它们。例如,如果要确保从内存池中分配Foo的所有实例。

除了这类事情之外,很少需要重载它们。

票数 3
EN

Stack Overflow用户

发布于 2012-10-12 09:13:32

在类级别,重载它们的通常原因是使用内存池。这通常只适用于动态分配很多的非常小的类;例如,图中的节点,其中池分配器可以显著提高局部性和分配/释放速度。

您还可以重载全局new和delete操作符,以使用特殊的分配器(比如从内存中的特定区域进行分配)。然而,这可能很棘手,因为没有办法在delete表达式中指定额外的参数。实际上,当您这样做时,您还必须替换非放置的new和delete操作符,并安排new操作符以某种方式存储查找正确deleter所需的信息。

当然,尽管不是重载,但出于调试目的(或者因为您有一些自定义的放置new/ delete ),您可以将全局new和delete运算符替换为用于收集有关分配和删除的信息的运算符。

您不应该对库中的全局new/delete执行任何操作。由于您所做的任何事情都需要替换非放置表单,因此在库中执行将存在冲突的风险(如果用户还需要在其主应用程序中执行此操作)。

票数 2
EN

Stack Overflow用户

发布于 2012-10-12 09:05:28

此外,如果您创建了一个自定义分配库,如TCMalloc,并且您希望程序中来自new的所有分配都转到您的库中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12855531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文