覆盖特定类的新操作符和删除操作符的原因是什么?
动态内存分配操作符 - new和delete可以为特定的类重写。 我可以定义一个不同于Windows上C ++运行时提供的默认内存分配方案。 我有几个相关的问题:
是重写新的和删除运算符的特定类可移植,这样它也可以在UNIX上工作? 它是C ++标准的一部分吗?
什么情况下可能需要重写特定类的内存分配操作符? 只有我能想到的情况是 - 跟踪内存泄漏分配。
是的,它是可移植的,但要注意MS编译器处理与ANSI标准不同的'nothrow'部分 - 因此被烧毁。
至于为什么,跟踪记录,跟踪泄漏,追踪分配都很好,但这些都可以在全球范围内完成。 你可以重写新的/删除类似VRAM分配的东西,但是我通常会在不同的函数中看到这种东西。 覆盖新/删除的最大理由是,如果您对使用内存系统的方式有了更好的理解,并且可以比由供应商提供的漂亮而通用的new / delete版本更有效地定制您的函数。 小对象分配被认为是经常被忽视或者执行不力的事情,以及为了调试目的你想分配多少信息。
如果您需要自动使用不同的内存,例如内存池或共享内存。
还有......许多其他原因:为什么要替换默认的新操作符和删除操作符?
如果你想以不寻常的方式对准收件人。 例如前些时候,我将地址加8,并使用最后三位来实现其他目标
如果你想在预先初始化的内存中找到新的类实例。 例如,如果您想要从空节点列表中添加新节点。
链接地址: http://www.djcxy.com/p/73039.html上一篇: What are the reasons to override new and delete operator for a specific class?
下一篇: How can I automatically detect memory leaks in C++ in a portable way?