假设我想在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;
答案 0 :(得分:3)
交换后删除[]个安全吗?
是的
如果它们的长度相同怎么办?
长度无关。
答案 1 :(得分:3)
是的,可以。原因是准确释放内存所需的信息由空闲存储(在大多数情况下为堆)管理。因此,它知道如何根据地址而不是变量进行删除。通常,此信息保存在*(ptr - x)
中,其中x是跟踪数据的大小。
答案 2 :(得分:1)
是的,一旦完成交换,您当然可以删除指针。由于您不再需要指向数组,因此在这种情况下,交换后可以安全删除。
int *a;
int *b;
int *tmp;
a = new int[5];
b = new int[10];
tmp = a;
a = b;
b = tmp;
delete [] a;
delete [] b;
这是正确的方法。干得好