Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ delete[]在c+中的幕后工作原理+;?_C++_Delete Operator - Fatal编程技术网

C++ delete[]在c+中的幕后工作原理+;?

C++ delete[]在c+中的幕后工作原理+;?,c++,delete-operator,C++,Delete Operator,当我们使用new操作符为int数据类型动态分配内存时。使用delete操作符是有意义的。 例如 如果代码如下所示: int*p=新的int; 删除p 在这里,使用delete是有意义的。这里我们可以这样想,块p点,删除/取消分配该内存块。 但对于以下代码: int*p=newint[5]; 删除[]p 在这里使用delete[]有什么意义。我这样问是因为p不是数组的名称。这里p只是一个简单的指针,它指向数组内存块的第一个元素。现在,delete[]是如何删除整个数组的。这里没有提到数组的大小。

当我们使用new操作符为int数据类型动态分配内存时。使用delete操作符是有意义的。 例如 如果代码如下所示:

int*p=新的int;
删除p

在这里,使用delete是有意义的。这里我们可以这样想,块p点,删除/取消分配该内存块。 但对于以下代码:

int*p=newint[5];
删除[]p


在这里使用delete[]有什么意义。我这样问是因为p不是数组的名称。这里p只是一个简单的指针,它指向数组内存块的第一个元素。现在,delete[]是如何删除整个数组的。这里没有提到数组的大小。那么语句
delete[]p删除整个数组。

这取决于编译器如何完成。一种相当标准的方法是将数组大小存储在分配内存块之前的技术标头中。

由于
p
只是一个指针,编译器和标准库不知道它指向数组的第一个元素,因此不能使用非数组
delete
运算符。编译器和标准库需要知道您正在释放数组,这就是为什么您需要使用
delete[]
@Someprogrammerdude int回复:您不能使用非数组删除运算符。但它在删除p时起作用;尝试创建一个需要调用析构函数的对象数组,它将不再工作<代码>新建
必须与
删除
匹配,并且
新建[]
必须与
删除[]
匹配。