delete 和 delete []的区别

例如

int   *ptr=new   int[10];

删除时用     delete   ptr;
还是                 delete   []ptr;

------------------------------------------------------------------------------

 

了解C++的人都知道这个答案,用delete []ptr。

但是为什么呢? 如果用了delete ptr有什么后果

 

根据C++标准的描述,如果申请的是单个类型的空间,如new type,则用delete;如果申请的是数组空间,则用delete []。

但是就这个例子而言,如果是vc 6.0的环境,其实delete ptr 和 delete []ptr的结果是一样的,都可以把空间释放掉。但是我在suse linux下面的话会crash。

 

对于一般的编译器而言,对于基本类型,delete ptr 和 delete []ptr都是可以的,都可以把空间释放掉;但如果是对象类型的,如有一个类A, A* ptr = new A[10];,那么delete ptr 和 delete []ptr就有区别了,delete ptr也可以把空间释放掉,但只会调用ptr[0]的析构函数,而delete []则会调用数组中每个元素的析构函数。这就是有些C++的书上会说对于基本类型可以用delete   ptr,而对象一定要delete   []ptr的原因。

 

但这也会因为编译器的不同而不同,有的编译器可能对于基本类型,也仅仅是释放了ptr[0]的空间,所以我们一定要按照标准的做法来做,这里只是探讨一下原因。

 

 

 

 

你可能感兴趣的:(delete 和 delete []的区别)