测试答案是错误的?当我们删除安全的 NULL 指针时它不会崩溃 [重复]
Posted
技术标签:
【中文标题】测试答案是错误的?当我们删除安全的 NULL 指针时它不会崩溃 [重复]【英文标题】:Test answer is wrong yes? It will not crash as we delete NULL pointer which is safe [duplicate] 【发布时间】:2014-10-09 19:32:54 【问题描述】:考虑以下代码:
template<class T> void Kill(T *& objPtr)
delete objPtr;
objPtr = NULL;
class MyClass
;
void Test()
MyClass *ptr = new MyClass();
Kill(ptr);
Kill(ptr);
调用 Test() 会导致以下哪一个?
答案:代码会崩溃或抛出异常
测试答案是错误的是吗?它不会崩溃,因为我们删除了安全的 NULL 指针。
【问题讨论】:
你是对的。我猜测试答案最初是假设指针是按值而不是引用传递的(或者,它只是由不知道自己在做什么的人编写的)。NULL
的定义没有显示,它只是可能是荒谬的而不是标准的NULL
。如果没有这个,只能说测试答案很很可能(但没有证明)不正确。
【参考方案1】:
你是对的,测试答案是错误的。
第一个Kill
调用delete
,并将指针(通过引用传递)设置为NULL
第二个Kill
在空指针which is safe 上调用delete
。
注意:
根据 Cheers 和 hth。 - Alf 评论说,这是假设 NULL
是通常的空指针 0
。
【讨论】:
【参考方案2】:是的,删除空指针是安全的,但是我认为您不需要调用 delete 两次,因为 delete
无论如何都会执行检查。另外,我建议您使用像 unique_ptr<T>
这样的智能指针来处理删除。
【讨论】:
以上是关于测试答案是错误的?当我们删除安全的 NULL 指针时它不会崩溃 [重复]的主要内容,如果未能解决你的问题,请参考以下文章