delete与delete [] 的区别

class A
   {
   private:
      char *str;
      int len;
   public:
      A(){ str = new char[len]; }
      ~A() { delete [] str; }
   };
   A *a = new A[10];
   delete a; //1
   delete [] a;//2
   int *b=new int[10];
   delete b;//3
   delete []b;//4

delete的时候会调用类的析构函数,因为内置类型没有析构函数,可以直接知道其内存分配,所以3,4没有错误,但是自定义类,因为有可能在类中有new的出现,所以类在删除之前需要delete类中new的内存,而delete a只调用A[0]的析构函数,以至于其余9个的析构函数无法执行,则类中分配的内存会被永久占用,所以1 是错误的写法。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值