当我们使用new运算符为int数据类型动态分配内存时,使用delete运算符是有意义的。
例如,如果代码如下:
int *p = new int;
delete p;
在这里使用delete是有意义的。我们可以想象p指向的内存块被删除/释放。
但是对于下面的代码:
int *p = new int[5];
delete[] p;
在这里使用delete[]是有意义的吗?我问这个问题是因为p不是数组的名称,它只是指向数组内存块的第一个元素的简单指针。现在,delete[]如何工作以删除整个数组呢?由于没有提及数组的大小,那么语句delete[] p;
如何删除整个数组。
p
只是一个指针,编译器和标准库并不知道它指向数组的第一个元素,因此您不能使用非数组的delete
运算符。编译器和标准库需要知道您正在释放一个数组,这就是为什么您需要使用delete[]
的原因。 - Some programmer dudenew
必须与delete
匹配,而new[]
必须与delete[]
匹配。 - Some programmer dude