重新分配后删除 C++ 中的数组指针是否安全?

Is it safe to delete an array pointer in C++ after reassignment?

假设我想在 C++ 中交换两个数组指针,我用 new [] 分配了不同的长度。交换后 delete [] 它们安全吗?如果它们的长度相同呢?

int *a;
int *b;
int *tmp;

a = new int[5];
b = new int[10];
tmp = a;
a = b;
b = tmp;

delete [] a;
delete [] b;

Is it safe to delete [] them after swapping?

是的。

What if they have the same length?

长度无关。

是的,一旦交换完成,您当然可以删除指针。由于您不再需要指向数组,因此在这种情况下,交换后删除是安全的。

int *a;
int *b;
int *tmp;

a = new int[5];
b = new int[10];
tmp = a;
a = b;
b = tmp;

delete [] a;
delete [] b;

这是正确的做法。干得好

是的,你可以。原因是准确释放内存所需的信息由空闲存储(大多数情况下为堆)管理。所以它知道如何根据地址而不是变量进行删除。通常此信息保存在 *(ptr - x) 中,其中 x 是跟踪数据的大小。