他们在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
// ...
}
而且您可能希望通过安全检查。