在C ++中释放单个变量或数组之间的区别

时间:2014-02-07 06:21:08

标签: c++ memory-management dynamic

我正在研究来自learncppnewnew[],网站上有一个小细节,对我来说还不够明确。以下图片将解释我的问题:

enter image description here

在我们像单变量情况一样解除分配之后,我们还必须将数组指针设置为0吗?这是一项要求,还是与deletedelete[]

的程序不同?

Thnx任何帮助! =)

2 个答案:

答案 0 :(得分:4)

在重新分配之后,您不必将指针设置为零。这样做很简单,可以很容易地判断指针不再指向任何东西。

答案 1 :(得分:1)

这取决于您计划在代码中进一步做些什么。在删除用于指向的对象(无论是指向数组还是指向单数变量的指针)之后,将指针设置为NULL / nullptr,完全是为了将指针标记为已释放,因此您可以轻松地检查如果该指针仍然是“有效”或不是:

if (pnArray != nullptr) 
{
  // now it is safe to dereference the pointer
}

如果在代码中发生双重删除(不应该是这种情况),在nullptr上调用delete操作符不会使程序崩溃(双重删除可能会带来很大的痛苦:它可能会使应用程序崩溃,从而破坏堆,对已在堆上分配的对象进行一些更改..):

delete pnValue;
pnValue = nullptr;
....
delete pnValue; // safe to delete ( still it's not no-op )

如果你删除了它的析构函数中的类成员,你不需要将指针设置为nullptr-s(因为指针将不再使用)。

这些是原始指针,也许看看智能指针,这通常是更安全的选择