例如
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]的空间,所以我们一定要按照标准的做法来做,这里只是探讨一下原因。