delete和delete[]的区别

delete 和delete []的区别

int* a = new int[10]
  • 针对简单类型,使用new分配内存之后不管是数组还是非数组形式内存空间用两种方式都可以。delete adelete []a的释放效果相同。在简单类型分配内存时,内存的大小已经确定,系统可以记忆并且进行管理。在析构时,系统并不会调用析构函数。可以通过指针获取实际分配的内存空间。
  • 对于类类型,两种方式有不同的差异。
   class A
   {
   private:
      char *m_cBuffer;
      int m_nLen;
   public:
      A(){ m_cBuffer = new char[m_nLen]; }
      ~A() { delete [] m_cBuffer; }
   };
   A *a = new A[10];

delete a仅能释放a指针指向的全部内存空间,但是只调用了a[0]对象的析构函数,剩下的a[1]-a[9]这9个用户自行分配的m_cBuffer对应的内存空间不能释放掉。
delete []a 调用使用类对象的析构函数释放用户自己分配的内存空间并且释放了a指针指向的全部内存空间。

简单总结
  • delete ptr 代表释放内存,且只用来释放ptr指向的内存。
  • delete [] ptr用来释放ptr指向的内存,而且逐一调用数组中每个对象的destructor。
  • 对于像int/char/long/int*/struct等等简单数据类型,由于对象没有destructor,所以用delete 和delete [] 是一样的,但是如果是C++对象数组就不同了!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值