【C++内存管理机制】学习笔记(2):Array new

81 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 8 天,点击查看活动详情

Array new

自定义一个类A,测试Array new

在这里插入图片描述

在这里插入图片描述 测试new 10个int

发现直接delete,不加[]还是正确的

在这里插入图片描述

继续测试,一个Demo类含有3个int

申请3个demo类,那么就有9个int

如果这是还是直接delete,因为内存中存的是3(有3个),所以只会删除3个int,而实际却有9个

所以若不加[],则会出现内存泄露的情况

在这里插入图片描述 右边61h是16进制,计算过程:

  • (32 + 4)【黄色部分】 + 4【存3的那个部分】 + (9 * 4)【9个int】 + (4 * 2)【上下两个边界,写61h那里】 = 84
  • 84再扩充到96(需要16的倍数)
  • 96 = 60h(16进制转换)
  • 所以上下填充61h(为啥+1,有点没有懂)

在这里插入图片描述

61h是16进制,计算过程是

  • (32 + 4)【黄色部分】 + 4【存3的那个部分】 + (9 * 4)【9个int】 + (4 * 2)【上下两个边界,写61h那里】 = 84
  • 84再扩充到96(需要16的倍数)
  • 96 = 60h(16进制转换)
  • 所以上下填充61h(为啥+1,有点没有懂)

总结:

  • 使用new [],删除时使用delete [],这样不容易出错
  • 虽然有时只使用delete也不会报错,但是类似于上面demo类的情况,则会出现内存泄露的情况(小心谨慎使用)

最后

仅为个人笔记,欢迎您指出错误,感谢!