Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 当指针在c+中的末尾没有使用时,是否有必要将其设为Null+;_C++_Pointers_Dereference - Fatal编程技术网

C++ 当指针在c+中的末尾没有使用时,是否有必要将其设为Null+;

C++ 当指针在c+中的末尾没有使用时,是否有必要将其设为Null+;,c++,pointers,dereference,C++,Pointers,Dereference,当指针不再使用时,是否有必要使指针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 我的问题是: 它会对程序造成什么样的影响,即好的或坏的影响 如果我们不使用这个会发生什么 提前感谢您澄清我的观点。否。如果不再使用指针变量,则无需将nullptr赋值给它 但是,如

当指针不再使用时,是否有必要使指针
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
我的问题是:

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

提前感谢您澄清我的观点。

否。如果不再使用指针变量,则无需将
nullptr
赋值给它


但是,如果您需要在程序中稍后的某个点检测指针变量是否引用了有效对象,那么在
删除它之后,将其设置为
nullptr
,稍后测试这一点是最简单的方法。

您的意思是
foo=nullptr,而不是
foo=NULL
因为
NULL
在C++中没有意义,如果不再使用冲击器,就没有理由将其设置为NULL。但无论如何,你不应该使用原始指针。@n.“代词是m。“无论如何,你不应该使用原始指针”我不能同意。不应该使用拥有原始指针。仍然存在原始指针的用例,因此将它们设置为有效或空仍然是一种良好的实践pointer@BasileStarynkevitch什么?NULL是在C++标准中定义的(它是C定义的存根)。默认情况下,IdCelv463035818将使用非可空的智能指针,参见“十亿美元错误”。我不同意您的最后一句。这是一种糟糕的方法,因为它不会以某种方式神奇地将指针的其他副本设置为
nullptr
。现在还不完全清楚“检测指针变量在以后某个点是否有效”是什么意思。老实说,我想不出这句话有什么意思能使你的说法准确无误。如果你能测试这个变量,它是有效的。如果您的意思是它是否指向一个存在的对象,那么测试将无法工作,因为我已经解释过了。@David编辑后会更好吗?如果没有,请随意编辑自己。我想你完全知道我要表达什么。老实说,我不知道。这仍然是错误的。如果在指针的副本上有另一段名为
delete
的代码,这将不会有帮助。这并不是一个普遍推荐的做法,因为你只能在很小的情况下使用它,而你恰好知道它会起作用。通常,除了以依赖于代码的方式仔细跟踪指针的值外,没有简单的方法可以知道指针的值是否仍然有效。未经仔细分析而设置为
nullptr
是一种坏习惯,其不幸后果是认为它总是有效并出错。@David,我的部分答案仅限于稍后使用此特定变量的狭义情况(通常是成员变量)您需要知道它是否持有有效值。