删除指向同一个变量的指针
Posted
技术标签:
【中文标题】删除指向同一个变量的指针【英文标题】:Deleting pointers that point to the same variable 【发布时间】:2016-02-29 01:07:19 【问题描述】:下面的代码是一本书的代码摘录的浓缩版本,其想法是创建 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;
【问题讨论】:
您的代码是正确的。delete
删除指向的对象(它不是基于指针的引用计数释放,或类似的东西)
【参考方案1】:
是的:你分配的一件事被删除了。我不确定将 NULL 分配给变量是 正确 是什么意思,但是在这样做之前它们的值不再指向分配的内存,它肯定不是 坏主意。
【讨论】:
【参考方案2】:如果我的理解是正确的,在临时指针上调用delete真的会删除原来的num变量吗?由于临时指针和num都是悬空指针,将它们都设置为NULL是否正确?
是的,因为 ptr
和 num
指向完全相同的分配内存地址,而 delete
运算符只需要该地址,它并不关心哪个变量保存该地址。
并且由于临时指针和num都是悬空指针,将它们都设置为NULL是否正确?
不需要将它们设置为NULL
(如果您使用的是 C++11,请使用nullptr
)。但是,如果您以后错误地使用了那些悬空指针,那么使用调试器如果将指针设置为nullptr
,就会更容易发现问题。
【讨论】:
以上是关于删除指向同一个变量的指针的主要内容,如果未能解决你的问题,请参考以下文章