删除指向同一个变量的指针

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是否正确?

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

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

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

【讨论】:

以上是关于删除指向同一个变量的指针的主要内容,如果未能解决你的问题,请参考以下文章

当向量在内部类中时,如何删除指向对象的向量指针

指向函数本地结构的指针的范围和生存期

treeList如何删除一个叶子节点

如何定义一个整型变量和整型的指针变量

函数指针

我是不是正确删除了指向对象的指针向量?