我正在研究来自learncpp的new
和new[]
,网站上有一个小细节,对我来说还不够明确。以下图片将解释我的问题:
在我们像单变量情况一样解除分配之后,我们还必须将数组指针设置为0吗?这是一项要求,还是与delete
和delete[]
Thnx任何帮助! =)
答案 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(因为指针将不再使用)。
这些是原始指针,也许看看智能指针,这通常是更安全的选择