条款 16

一,使用new与delete时,采取相同的形式

1,如果采用不同的形式带来的问题

string *p = new string[100];
delete p;

程序分析:

上面的程序会导致不明确的行为,p所包含的100个对象中有99个不太可能被正确释放,因为他们的析构函数有可能没被调用。


2,new与delete实际进行的操作

当我们使用new动态创建一个对象时,会有两件事情发生,一是:内存被分配出来;二是:对此内存会有一个构造函数被调用。当我们使用delete释放内存时,也有两件事情发生,一是:对此内存会有一个析构函数被调用;二是:释放掉内存。使用delete的最大问题是,即被删除的内存之内有多少个对象,可以理解为即将被删除的指针,所指的是单一对象还是对象数组。当我们使用delete [] 删除一个指针时,delete便认定指针指向的是一个对象数组,当我们使用delete删除一个指针时,delete便认定指针指向的是单一的对象。


3,使用规则

如果调用new时使用[],对应地调用delete时也使用[];如果在调用new时没有使用[],对应地调用delete时也不应使用[]。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值