条款5:对应的new和delete要采用相同的形式 [内存管理]

本文详细介绍了在C++中使用new与delete操作符时应注意的细节,特别是当使用new分配数组时如何正确地释放内存。文章强调了在new时使用了‘[]’的情况下,释放内存时也必须使用delete[];反之亦然。此外还提到了避免在使用typedef时与new结合可能导致的问题。

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

之前介绍了new,delete要比malloc,free的好处,大家都知道了尽量使用new ,delete,但是在使用new,delete的时候也有些注意的事项

那就是,如果new的时候带‘[ ]’那么delete的时候也要带‘[ ]’因为前一章介绍过,new的时候会调用构造函数,如果 string *stringptr2  = new sting[100];

那么相当于会对这个数组每个元素掉一次构造函数,这样如果在这时候,调用delete stringptr2,那么只会对数组的第一个元素调用析构函数,而这时应该调用

delete [ ] stringptr2, 这样每个数组的元素才会调用一次析构函数,整个数组的值才会被释放。

那么问题来了,如果string *stringptr1 = new string; 而delete的时候,用的是 delete [ ]string1;那么也会造成不可预测的问题

所以,总结起来,new的时候 含有“[ ]”,那么释放的时候,也是要释放整个数组,如果new的时候没有“[ ]”,释放的时候也不可以带着“[ ]”是否带着“[ ]”要看申请的时候

 

于此同时,typedef最好不要用到new,因为这样,对于不清楚改变量的使用者,可能会造成[ ]的使用不准确

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值