delete[] 在 c++ 中如何在幕后工作?
How delete[] works behind the scene in c++?
当我们使用 new 运算符为 int 数据类型动态分配内存时。使用删除运算符是有意义的。
例如
如果代码如下:
int *p=new int;
delete p;
在这里使用 delete 是有意义的。这里我们可以这样想那个块,p指向,delete/de-allocate那个内存块。
但是对于下面的代码:
int *p=new int[5];
delete[] p;
在这里使用 delete[] 有什么意义。我问这个是因为 p 不是数组的名称。这里 p 只是一个简单的指针,指向数组内存块的第一个元素。现在 delete[] 如何删除整个 array.As 这里没有提到数组的大小。那么delete[] p;
语句如何删除整个数组。
由编译器决定如何做到这一点。一种相当标准的方法是将数组的大小存储在分配的内存块之前的技术 header 中。
当我们使用 new 运算符为 int 数据类型动态分配内存时。使用删除运算符是有意义的。
例如
如果代码如下:
int *p=new int;
delete p;
在这里使用 delete 是有意义的。这里我们可以这样想那个块,p指向,delete/de-allocate那个内存块。 但是对于下面的代码:
int *p=new int[5];
delete[] p;
在这里使用 delete[] 有什么意义。我问这个是因为 p 不是数组的名称。这里 p 只是一个简单的指针,指向数组内存块的第一个元素。现在 delete[] 如何删除整个 array.As 这里没有提到数组的大小。那么delete[] p;
语句如何删除整个数组。
由编译器决定如何做到这一点。一种相当标准的方法是将数组的大小存储在分配的内存块之前的技术 header 中。