以下代码是一本书中代码摘录的精简版本,其目的是创建 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;
答案 0 :(得分:2)
是:您分配的一件事被删除了。我不确定你是什么意思正确为变量分配NULL,但是在这之前它们的值不再指向已分配的内存,它肯定不是' ta 坏的想法。
答案 1 :(得分:1)
如果我的理解是正确的,在临时指针上调用delete实际上删除了原来的num变量吗?由于临时指针和num都是悬空指针,将它们都设置为NULL是正确的?
是的,因为ptr
& num
指向完全相同的已分配内存地址,而delete
运算符只需要该地址,它不关心哪个变量保存该地址。
和因为临时指针和num都是悬空指针,将它们都设置为NULL 是正确的吗?
不需要将它们设置为NULL
(如果您使用的是C ++ 11,请使用nullptr
)。但是如果你最后错误地使用那些悬空指针,使用调试器,如果指针设置为nullptr
,则更容易捕获问题。