【发布时间】:2019-07-22 07:18:43
【问题描述】:
当我们为 int 数据类型使用 new 运算符动态分配内存时。使用删除运算符是有意义的。
例如
如果代码如下:
int *p=new int;
delete p;
这里使用 delete 是有意义的。在这里,我们可以这样认为块,p 点,删除/取消分配该内存块。 但是对于下面的代码:
int *p=new int[5];
delete[] p;
在这里使用 delete[] 有什么意义。我问这个是因为 p 不是数组的名称。这里 p 只是一个简单的指针,它指向数组内存块的第一个元素。现在 delete[] 如何删除整个数组。因为这里没有提到数组的大小。那么delete[] p;这个语句是如何删除整个数组的呢。
【问题讨论】:
-
由于
p只是一个指针,编译器和标准库都不知道它指向数组的第一个元素,所以不能使用非数组@987654325 @ 操作员。编译器和标准库需要知道你正在释放一个数组,这就是为什么你需要使用delete[]。 -
@Someprogrammerdude int 回复您:不能使用非数组删除操作符。但它可以删除 p;
-
尝试创建一个需要调用其析构函数的对象的数组,它将不再起作用。
new必须与delete匹配,new[]必须与delete[]匹配。
标签: c++ delete-operator