C++ delete[]在c+中的幕后工作原理+;?
当我们使用new操作符为int数据类型动态分配内存时。使用delete操作符是有意义的。 例如 如果代码如下所示: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[]是如何删除整个数组的。这里没有提到数组的大小。
int*p=新的int;
删除p代码>
在这里,使用delete是有意义的。这里我们可以这样想,块p点,删除/取消分配该内存块。
但对于以下代码:
int*p=newint[5];
删除[]p代码>
在这里使用delete[]有什么意义。我这样问是因为p不是数组的名称。这里p只是一个简单的指针,它指向数组内存块的第一个元素。现在,delete[]是如何删除整个数组的。这里没有提到数组的大小。那么语句delete[]p代码>删除整个数组。这取决于编译器如何完成。一种相当标准的方法是将数组大小存储在分配内存块之前的技术标头中。由于p
只是一个指针,编译器和标准库不知道它指向数组的第一个元素,因此不能使用非数组delete
运算符。编译器和标准库需要知道您正在释放数组,这就是为什么您需要使用delete[]
@Someprogrammerdude int回复:您不能使用非数组删除运算符。但它在删除p时起作用;尝试创建一个需要调用析构函数的对象数组,它将不再工作<代码>新建
必须与删除
匹配,并且新建[]
必须与删除[]
匹配。