测试答案是错的,对吗?它不会崩溃,因为我们删除NULL指针,这是安全的

Test answer is wrong yes? It will not crash as we delete NULL pointer which is safe

本文关键字:我们 删除 因为 NULL 崩溃 安全 指针 答案 对吗 测试      更新时间:2023-10-16

考虑以下代码:

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指针时,它不会崩溃,这是安全的

你是正确的,测试答案是错误的。

第一个Kill调用delete,并设置指针(通过引用传递)为NULL第二个Kill在空指针上调用delete,这是安全的。

注意:

根据Cheers和hth。- Alf评论,这是假设NULL是通常的空指针,0 .

是的,删除空指针是安全的,但是我认为你不需要调用删除两次作为delete执行检查。此外,我建议您使用使用智能指针,如unique_ptr<T>,它负责删除。

相关文章: