【问题标题】: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 删除指向的对象(它不是基于指针的引用计数释放,或类似的东西)

标签: c++ pointers memory-management


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-14
      • 2015-08-09
      • 1970-01-01
      • 1970-01-01
      • 2013-09-24
      • 2012-08-12
      • 1970-01-01
      相关资源
      最近更新 更多