一. 针对类class,这两种方式的效果是不同的。

 当你通过下列方式分配一个类对象数组:
   class A
   {
   private:
      char *m_cBuffer;
      int m_nLen;
   public:
      A(){ m_cBuffer = new char[m_nLen]; }

      ~A() {  delete [] m_cBuffer;  }
   };
 

A *p = new A[10];
delete p; //释放了p指向的全部内存,但只调用了p[0]的析构函数,剩下的从p[1]到p[9]自行分配的m_cBuffer指向的内存将不能被释放,从而造成内存泄漏。
delete [] p; //释放了p指向的全部内存,并逐一调用数组中每个对象的析构函数。

二. 针对基本数据类型,这两种方式的效果是相同的。

对于int/char/long/int*/struct等简单数据类型,由于对象没有析构函数,所以用delete 和delete [] 是一样的!

三. 总结

一个简单的使用原则:

new 和 delete、new[] 和 delete[] 对应使用。

相关文章:

  • 2022-12-23
  • 2022-02-02
  • 2021-07-11
  • 2022-01-10
  • 2022-12-23
  • 2022-01-06
  • 2021-11-22
猜你喜欢
  • 2022-01-17
  • 2021-08-09
  • 2021-12-17
  • 2021-09-06
  • 2022-12-23
相关资源
相似解决方案