为啥***删除后指针指向0? [复制]

Posted

技术标签:

【中文标题】为啥***删除后指针指向0? [复制]【英文标题】:Why point a pointer to 0 after*** deleting it? [duplicate]为什么***删除后指针指向0? [复制] 【发布时间】:2013-08-08 07:25:05 【问题描述】:

我很困惑为什么有些人在删除它之后将指针(之前在堆上创建)指向 0

例如:

Node* newNode = new Node();

delete newNode;
newNode = 0;    // why?

如果一个已删除的指针指向 0 或其他东西,为什么这很重要?

【问题讨论】:

这是对任何阅读代码的人的警告。这是一种简写方式:“请特别小心处理这段代码——作者可能不知道或不理解 RAII,或者完全误解了对象的生命周期。” 【参考方案1】:

这样做是为了如果您在删除后不小心尝试使用它,您会立即收到错误消息。使用指向已删除内存的指针有时可能会“工作”,但稍后会崩溃。通过将其设置为 NULL,您可以确保它始终是一个不好使用的指针。

【讨论】:

这是不正确的——删除0;将始终有效 - 请参阅 ***.com/questions/615355/… 或规范。 @EdHeal:答案很好。它说Using a pointer 没有删除指针。 @JesseGood - 删除一个 NULL 指针 - 没问题 - 它有效 @EdHeal:使用指针不仅仅包含删除它。 hth @EdHeal:这个问题没有说明在将其设置为 NULL 后将其删除。【参考方案2】:

因此,如果您在代码中进一步尝试再次删除它,您将不会收到错误。

只是一个标记,你已经做到了!

【讨论】:

【参考方案3】:

你应该让一个指针指向NULL,让它在删除后失效,这样如果你不小心访问它就会出错。

注意: 早期版本的编译器使用NULL(实际上是#DEFINE NULL 0)使指针无效。 C++11 现在有nullptr 使其无效(与NULL 不同)

【讨论】:

以上是关于为啥***删除后指针指向0? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的指针在删除后仍然指向一个地址?

我应该在删除后分配我的指针 0 吗? [复制]

为啥指向基类的派生类指针可以调用派生类成员函数? [复制]

尽管进行了相应的更正,为啥指向指针的指针与指针的处理方式不同

为啥在 C 中为数组声明和指向数组声明的指针动态分配的内存不同? [复制]

为啥free函数不在释放内存后,将指针置NULL,野指针有啥用