Effective C++读书笔记之成对使用new和delete时要采用相同的形式

本文讲解了C++中new和delete操作符的正确使用方法,特别是对于数组对象的内存分配和释放过程。强调了在使用new创建数组时,释放内存时也必须使用对应的delete[],并提供了实际代码示例。

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

先看一段代码,看看有什么错:
 string* stringArray = new string[100];
 ....
 delete stringArray;
 好像是没有错,可是你会发现new 和delet的形式不一样。new声明了个数组,而delete只是删除了一个单一对象。其它的99个对象不大可能被删除,因为它们的析构函数没有被调用。
       当我们使用new时(也就是通过new动态生成一个对象),有两件事发生。第一,内存被分配,第二,针对此内存会有一个(声明单一对象)或更多(声明对象数组)构造函数被调用。使用delete时同样有两个事发生:第一,针结内存会有一个(或更多)析构函数被调用,第二,内存才被释放。所以我们需要明确的给出new和delete需要调用多少次构造函数和析构函数。这个个数会在数组所用的内存中存储着,所以我们只需要告诉,我们new 或delete的是单一对象,还是对象数组。
       当你对着一个指针使用delete,唯一能够让delete知道内存中是否存在一个“数组大小记录”的方法就是:由你来告诉它,如果你使用delete进加上中括号,delete便认定指针指向一个数组,否则它便认定指针指向单一对象。
         游戏规则很简单:如果你调用new时使用[],你必须在对应调用delete时也使用[]。如果你调用new时没有使用[],那么也不该在对应调用delete时使用[]。
 注意:
 1) 如果你的类中有一个指针指向动态分配内存,并提供了多个构造函数,一定在所有的构造函数中使用相同的new形式。
 2) 最好尽量不要对数组形式做typedefs动作
 总结:
 如果你在new表达式中使用[],必须在相应的delete表达式中也使用[]。如果你在new表达式中不使用[],一定不要在相应的delete表达式中使用[]
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值