new、delete、[]new、[]delete

本文详细解析了C++中new和delete操作的分解过程,包括operator new和malloc的内存分配差异,以及为何使用[]new必须匹配[]delete以避免内存泄漏。文中还提到了内存对齐和额外存储空间用于记录内存信息的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考B站侯捷

new的分解动作

  1. new关键字调用operator new
  2. operator new调用malloc
  3. 强制转换
  4. 调用构造函数(这也是为什么malloc不能申请包含指针的类内存的原因)
  5. PS:new关键字是表达式,固定形式;operator new才可以重载

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也不会发生内存泄漏,但是最好也要匹配使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值