删除指向同一变量的指针

Deleting pointers that point to the same variable

本文关键字:变量 指针 删除      更新时间:2023-10-16

下面的代码是从一本书中提取的代码的精简版本,其想法是创建 ptr 变量的副本,然后将 ptr 变量指向不同的地址,最后删除临时指针。

如果我的理解是正确的,那么在临时指针上调用 delete 实际上会删除原始 num 变量吗?由于临时指针和 num 都是悬空指针,将它们都设置为 NULL 是否正确?

int *num = new int(5);
int num1 = 10;
int *ptr = num;
int *temp = ptr;
ptr = &num1;
delete temp;
temp = NULL;
num = NULL;

是的:您分配的一件事将被删除。 我不确定将 NULL 分配给变量是正确的意思,但是在这样做之前它们的值不再指向分配的内存,这当然不是一个主意。

如果我的理解是正确的,那么在临时指针上调用 delete 实际上会删除原始 num 变量吗?由于临时指针和 num 都是悬空指针,将它们都设置为 NULL 是否正确?

是的,因为ptr&num指向完全相同的分配内存地址,而delete运算符只需要该地址,所以它并不关心哪个变量保存该地址。

由于临时指针和 num 都是悬空指针,将它们都设置为 NULL 是否正确

不需要将它们设置为 NULL(如果使用 C++11,请使用 nullptr)。但是,如果您以后最终错误地使用了这些悬空指针,那么使用调试器,如果指针设置为 nullptr,则更容易捕获问题。