首页 > 其他 > 详细

new、delete、[]new、[]delete

时间:2021-01-15 09:54:24      阅读:34      评论:0      收藏:0      [点我收藏+]

参考B站侯捷

new的过程

技术分享图片

  1. new关键字调用operator new
  2. operator new调用malloc
  3. 强制转换
  4. 调用构造函数(这也是为什么malloc不能申请包含指针的类内存的原因)

delete过程

技术分享图片

  1. delete关键字
  2. 调用析构函数
  3. delete关键字调用operator delete
  4. operator delete调用free

malloc分配的内存并不只是你申请的大小

技术分享图片

  1. pad是内存对齐
  2. 上下粉色是cookie,记录分配内存的信息,操作系统用于回收内存

[]new一定要用[]delete,否则可能会发生内存泄漏

技术分享图片
技术分享图片

  1. []new会分配多四个字节,记录n个对象
  2. delete使用[]才会读取记录,调用n次析构函数
  3. delete不使用[],只调用1次析构函数
  4. 注意:并不是malloc这一块的内存发生泄漏,而是调用构造函数的对象发生了内存泄漏
  5. 如果[]new不需要调用构造函数分配内存,那么即使使用delete也不会发生内存泄漏,但是最好也要匹配使用

new、delete、[]new、[]delete

原文:https://www.cnblogs.com/wasi-991017/p/14280154.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!