他们在Learn C++上编写了此代码以释放内存:

int *pnValue = new int; // dynamically allocate an integer
*pnValue = 7; // assign 7 to this integer
delete pnValue;
pnValue = 0;

我的问题是:“是否需要完整地正确释放内存的最后一条语句?”

我以为指针*pnValue仍在堆栈上,而new对指针没有任何意义。而且,如果它在堆栈上,则在应用程序离开作用域(在其中声明了指针的作用域)时会对其进行清理,不是吗?

最佳答案

删除指针后,无需将其设置为NULL(或零)。但是,这是个好习惯。一方面,如果以后取消引用指针,将无法访问一些随机数据。此外,您经常会发现以下代码:

if(ptr)
{
  delete ptr;
  ptr = NULL;
}

因此,将指针设置为NULL将确保不会删除两次。

最后,您可能会找到如下代码:
void foo(bar *ptr)
{
  if(!ptr) throw Exception(); // or return, or do some other error checking
  // ...
}

而且您可能希望通过安全检查。

09-20 04:10