删除指向同一变量的指针

时间:2016-02-29 01:07:19

标签: c++ pointers memory-management

以下代码是一本书中代码摘录的精简版本,其目的是创建 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;

2 个答案:

答案 0 :(得分:2)

是:您分配的一件事被删除了。我不确定你是什么意思正确为变量分配NULL,但是在这之前它们的值不再指向已分配的内存,它肯定不是' ta 的想法。

答案 1 :(得分:1)

  

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

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

  

因为临时指针和num都是悬空指针,将它们都设置为NULL 是正确的吗?

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