在学习C ++时,他们将其写成了自由记忆:
int *pnValue = new int; // dynamically allocate an integer
*pnValue = 7; // assign 7 to this integer
delete pnValue;
pnValue = 0;
我的问题是:“是否需要正确释放内存的最后一句话,完整?”
我认为指针*pnValue
仍然在堆栈上,new
对指针没有任何意义。如果它在堆栈上,它将在应用程序离开作用域时被清除(指针被声明在哪里),不是吗?
答案 0 :(得分:3)
没有必要,但是当你完成它们时,将指针设置为NULL(0)总是一个好主意。这样,如果你将它传递给一个函数(这将是一个bug),它可能会给你一个错误,而不是试图操作无效的内存(使错误更容易追踪)。它也使条件更简单。
答案 1 :(得分:2)
删除后指针设置为NULL(或零)是没有必要的。不过这是一个很好的做法。首先,如果稍后取消引用指针,则无法访问某些随机数据。此外,您经常会找到以下代码:
if(ptr)
{
delete ptr;
ptr = NULL;
}
因此将指针设置为NULL将确保它不会被删除两次。
最后,你可能会找到这样的代码:
void foo(bar *ptr)
{
if(!ptr) throw Exception(); // or return, or do some other error checking
// ...
}
你可能希望安全检查能够被击中。