zoukankan      html  css  js  c++  java
  • delete 与 delete []的区别

    一. 针对类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[] 对应使用。

  • 相关阅读:
    Ajax入门
    多线程入门(五)
    多线程入门(四)
    多线程入门(三)
    多线程入门(二)
    多线程入门(一)
    git使用简介
    Windows远程登录到VirtualBox安装的Ubuntu11.10
    阿里面试2(转)
    百度java开发面试题
  • 原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/4432361.html
Copyright © 2011-2022 走看看