delete与delete []有什么区别?
- 对于简单类型来说,使用
new
分配后,不管是数组数组还是非数组形式,两种方式都可以释放内存:int *a = new int(1); delete a; int *b = new int(2); delete [] b; int *c = new int[11]; delete c; int *d = new int[12]; delete [] d;
- 对于自定义类型来说,就需要对于单个对象使用
delete
,对于对象数组使用delete []
,逐个调用数组中对象的析构函数,从而释放所有内存;如果反过来使用,即对于单个对象使用
delete []
,对于对象数组使用delete
,其行为是未定义的; -
所以,最恰当的方式就是如果用了
new
,就用delete
;如果用了new []
,就用delete []
。
评论(1)
对于new[]得到的对象数组,只有当类存在自定义的析构函数的情况下,才会多使用一些bytes记录数组的长度以及内存对齐;