覆盖特定类的new和delete运算符的原因是什么?

时间:2011-12-05 16:47:06

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

动态内存分配运算符 - 可以为特定类重写new和delete。我可以定义一个不同于Windows上C ++运行时提供的默认内存分配方案。我几乎没有相关的问题:

  1. 是否覆盖了特定类可移植的new和delete运算符,以便它也适用于unix?它是C ++标准的一部分吗?

  2. 可能需要覆盖特定类的内存分配运算符的情况是什么?只有我能想到的情况是 - 跟踪泄漏的内存分配。

3 个答案:

答案 0 :(得分:3)

如果需要自动使用其他内存,例如内存池或共享内存。

还有......许多其他原因:Why would one replace default new and delete operators?

答案 1 :(得分:1)

是的,它是可移植的,但要注意MS编译器处理它的“nothrow”部分不同于ANSI标准 - 烧毁了它。

至于为什么,是跟踪内存,跟踪泄漏,跟踪分配都很好,但这些可以全局完成。您可以为VRAM分配等内容覆盖new / delete,但我通常会看到在不同的函数中调出的那种东西。覆盖新/删除的最大原因是,如果您更好地了解内存系统的使用方式,并且可以比供应商提供的新的/通用的新/删除版本更有效地定制您的功能。小对象分配是一种经常被忽视或实现不当的东西,以及为了调试目的而分配多少信息。

答案 2 :(得分:0)

如果您想以不寻常的方式对齐收件人。例如,有些时候我将地址加到8并将最后三位用于其他目标

如果要在预初始化的内存中找到新的类实例。例如,如果要从空节点列表中添加列表中的新节点。