是`& variable = null;`可能吗?

时间:2017-05-16 16:35:31

标签: c++ pointers syntax

如果将指针设置为null,则删除该变量。它不能再被使用,它不再需要您的存储空间。 指针的名称代表其值。它的值始终为&someVariable。 我可以这样做:&someVariable = null;

[编辑]当我写这篇文章时,我对C ++很陌生,所以我有多种误解。

要删除指针,您必须delete ptr;而不是通过ptr = nullptr;将其设置为空。

&someVariable是左值,因此无法分配任何内容。

它是0NULLnullptr,而不是null

总之,即使你很幸运并且编译,你也不应该delete &anything;。只需删除分配anything时获得的指针。

2 个答案:

答案 0 :(得分:7)

不,你不能。 &someVariable是一个右值。它无法分配,尝试也毫无意义。

此外,你想要做的事情的想法是毫无意义的。函数变量在堆栈上分配,仅在函数返回时释放。无法释放全局变量。如果堆不能以这种方式工作,则分配结构中的变量不可能被释放。

变量不会被删除。这毫无意义。内存取消分配取决于它的分配方式:

  • on stack - >功能返回
  • 分配了new - > deleteauto_ptr或其他智能指针(调用delete
  • 分配了malloc - > free
  • 全局变量 - >进程退出

答案 1 :(得分:2)

  

如果将指针设置为null,则删除该变量。

不,不是。

  

它不能再使用了,它不再需要您的存储。

事实并非如此。

  

我可以这样做:&someVariable = null;

没有。即使你写了nullptr而不是不存在的null,即使你可以修改内置类型的右值,它也只会设置一些临时值的值指向nullptr的指针。

修改指针对它过去指向的东西完全没有影响。

听起来你对delete感到困惑,并将指针设置为null。