delete加不加[]的区别

delete是我们c++中的关键字,我们都知道它和new是配套使用的,有new就有delete不然会存在内存泄漏的问题。但是我们使用过delete的同学可能会发现delete有两种形式,一种是delete [],那这两个有什么区别呢?     

         1、delete 释放new分配的单个对象指针指向的内存

         2、delete[] 释放new分配的对象数组指针指向的内存

         3、delete处理单个类类型,先会调用析构函数,释放它所占资源,然后释放它所占内存空间。

         4、delete处理数组类类型的时候,会对每一个数组对象都调用它们的析构函数,然后再释放它们所占用的内存空间。所以对于类类型的数组如果不调用delete[],那就只调用了下标为0的对象的析构函数,可能会产生问题。

         5、两个都会释放所占内存,对于内置类型不管是数组还是单个对象,都可以混用,没有关系,因为对于内置类型,它只干一件事,就是释放它们所占内存

         6、如果对于单个类对象,delete和delete[]都可以,因为delete是知道它要释放多大空间的,加不加[]括号的区别是对不对每个对象调用析构函数,如果只有一个的话,它就调用一次,所以没有关系。

   示例1:
             int *p =new int;
             delete p;  //ok p指向了有一个int的内置类型大小的空间,delete直接释放了它。
             //delete []p;  ok
 
    示例2:
             int *p = new int [10]();  //ok
             delete p;   //ok  内置类型不需要调用析构函数
             delete [] p; //ok  效果和上面一样
 
    示例3:
             int *p =new A () ;
             delete p; //ok
             delete []p;//ok
 
   示例4:
              int *p =new A[10]();
              delete p;   //不行,只调用p[0]的析构函数
              delete [] p; //可以,会调用构造函数
 
简而言之:delete后面的方括号主要是针对自定义类有区别。
posted @ 2018-05-06 09:35  立体风  阅读(2048)  评论(0)    收藏  举报