C++-new和delete操作符的重载
在《C++ Primer》中看到关于操作符new和delete的重载,那么我们应该在什么时候重载这两个操作符呢?什么时候使用默认的new和delete操作符呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
在《C++ Primer》中看到关于操作符new和delete的重载,那么我们应该在什么时候重载这两个操作符呢?什么时候使用默认的new和delete操作符呢?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(3)
补充两种情况
1 记录heap的分配和释放,可用于检测内存泄露
2 通过VirtualAlloc,VirtualProtect和VirtualFree实现内存越界检查(只适用Windows)
一般来讲C++本身所提供的new/delete对内存的管理和操作已经相当强并且完美,在一般的情况下并不需要对这两个操作符进行重载来接管内存管理。但是在嵌入式系统等内存资源相对紧张,并且经常需要创建释放对象的环境中为了避免堆破碎或者要求较高的内存效率时需要对new和delete进行重载(可以这样设想,如果独立分配一个heap,在这个heap里都是相同的对象在分配和释放,那么即便是删除掉一个对象那么释放出来的内存空间正好供下一个分配的对象使用,因此可以避免掉内存碎片的问题)。
一个典型的场景是你用new实现一个内存池,只在第一次new的时候调用原生new出一块空间,以后的new只是从这块空间中获取空间。