可能重复:
有没有理由重载全局new和delete?
在什么情况下重载operator new
是完全合理的?
我听说你可以在一个非常经常使用new
的类中这样做。你能举个例子吗?
还有其他情况下,您是否想要重载operator new
?
更新:感谢到目前为止所有的答案。有人能给出一个简短的代码示例吗?这就是我上面提到的。像这样:这是一个小玩具类,这是该类的一个可工作的operator new
。
可能重复:
有没有理由重载全局new和delete?
在什么情况下重载operator new
是完全合理的?
我听说你可以在一个非常经常使用new
的类中这样做。你能举个例子吗?
还有其他情况下,您是否想要重载operator new
?
更新:感谢到目前为止所有的答案。有人能给出一个简短的代码示例吗?这就是我上面提到的。像这样:这是一个小玩具类,这是该类的一个可工作的operator new
。
每个类进行重载的一些原因:
1. 仪器化,例如跟踪分配,在调用者身上进行审计,如文件、行、堆栈。
2. 优化的分配例程, 例如内存池、固定块分配器。
3. 专业分配器,例如连续分配器,用于“启动时只分配一次”的对象——在游戏编程中经常用于需要持续整个游戏的内存等。
4. 对齐。这对大多数非桌面系统特别重要,尤其是在游戏控制台上,您经常需要以16字节边界进行分配。
5. 专门的内存存储器(同样适用于大多数非桌面系统),例如不可缓存内存或非本地内存。
为什么要重载operator new?
如果你想控制某个对象的内存分配,就可以采用这种方式。例如,当你有一些只会在堆上分配的小对象时,你可以为1k个对象分配空间,并先使用new运算符来分配1k个对象,然后一直使用该空间直到用完。