在c ++中最后没有使用指针时是不是需要将指针设为Null [重复]

Posted

技术标签:

【中文标题】在c ++中最后没有使用指针时是不是需要将指针设为Null [重复]【英文标题】:Is it necessary to make pointer Null when there is no use of it at the end in c++ [duplicate]在c ++中最后没有使用指针时是否需要将指针设为Null [重复] 【发布时间】:2020-05-27 03:10:23 【问题描述】:

当指针不再使用时,是否需要创建指针NULL。例如

Foo *foo=new Foo();
//code to be processed by pointer foo

/*end of code*/
delete foo;
foo=NULL;     //the point which i am asking

我的问题是:

它会对程序造成什么样的影响,即好或坏? 如果我们不使用它会发生什么?

提前感谢您清除我的积分。

【问题讨论】:

你的意思是foo=nullptr;,而不是foo=NULL;,因为NULL在C++中没有意义 如果不再使用指针,则没有理由使其为空。但无论如何你都不应该使用原始指针。 @n.'pronouns'm。 “无论如何你都不应该使用原始指针”我不能同意。不应该使用拥有原始指针。仍然有原始指针的用例,然后将它们设置为有效指针或空指针仍然是一个好习惯 @BasileStarynkevitch 什么? NULL 在 C++ 标准中定义(它是 C 定义的一个存根)。 @idclev463035818 以及默认情况下会使用不可为空的智能指针,请参阅“十亿美元的错误”。 【参考方案1】:

没有。如果您不再使用指针变量,则无需将 nullptr 分配给它。

但是如果你需要在程序的某个稍后时刻检测指针变量是否引用了一个有效对象,那么在之后将其设置为nullptrdelete 它,然后进行测试是最简单的方法。

【讨论】:

我不能同意你的最后一句话。这是一种糟糕的方法,因为它不会以某种方式神奇地将指针的其他副本设置为nullptr “检测指针变量在以后的某个时间点是否有效”的意思并不完全清楚。老实说,我想不出那个短语可能意味着使您的主张准确的任何东西。如果您可以测试变量,则它是有效的。如果你的意思是它是否指向一个存在的对象,那么由于我解释的原因,测试将不起作用。 @David 编辑后更好?如果没有,请随意编辑自己。我想你很清楚我想表达什么。 老实说,我不知道。它仍然是错误的。如果在其指针副本上还有其他一些名为delete 的代码,那将无济于事。这不是一般推荐的做法,因为您只能在您碰巧确定它会起作用的狭窄情况下使用它。一般来说,除了以代码相关的方式仔细跟踪它之外,没有简单的方法可以知道指针的值是否仍然有效。在没有仔细分析的情况下设置为nullptr 是一个坏习惯,会导致认为它总是有效并犯错误的不幸后果。 @David 我的部分回答关于您稍后使用 this specific 变量的狭窄情况(它通常是成员变量) 并且您需要知道它是否具有有效值。

以上是关于在c ++中最后没有使用指针时是不是需要将指针设为Null [重复]的主要内容,如果未能解决你的问题,请参考以下文章

将数组作为 void 指针发送时,在 c 中使用 puts 输出 2d char 数组时出错

10深入理解C指针之---指针和常量

对指针的引用如何在C ++中完全起作用,以及何时需要它们(在链表的情况下)

C:使用 2 个指针在数组中查找最大值(一个用于数组,一个用于最大值)

如何在 STL 中使用指向向量的指针,就像我们在将数组地址传递给另一个函数时将指针分配给数组一样?

C指针原理-C内嵌汇编