为啥***删除后指针指向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? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
尽管进行了相应的更正,为啥指向指针的指针与指针的处理方式不同