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

C++ 测试答案是错的是吗?它不会崩溃,因为我们删除空指针是安全的,c++,C++,考虑以下代码: template<class T> void Kill(T *& objPtr) { delete objPtr; objPtr = NULL; } class MyClass { }; void Test() { MyClass *ptr = new MyClass(); Kill(ptr); Kill(ptr); } 调用测试将导致以下哪项 答:代码将崩溃或引发异常 测试答案是错的是吗?当我们删除安全的空指针时,它不会崩溃

考虑以下代码:

template<class T> void Kill(T *& objPtr)
{
   delete objPtr;
   objPtr = NULL;
}
class MyClass
{
};
void Test()
{
   MyClass *ptr = new MyClass();
   Kill(ptr);
   Kill(ptr);
} 
调用测试将导致以下哪项

答:代码将崩溃或引发异常


测试答案是错的是吗?当我们删除安全的空指针时,它不会崩溃。

您是正确的,测试答案是错误的

第一个Kill调用delete,并将引用传递的指针设置为NULL 第二个Kill对空指针调用delete

注:


根据干杯和hthAlf评论说,这是假设NULL是通常的NULL指针,0。

是的,删除NULL指针是安全的,但是我认为在delete执行检查时,不需要调用delete两次。另外,我建议您使用智能指针,如unique_ptr,它负责删除操作。

您是对的。我猜测试答案最初是假设指针是通过值传递的,而不是引用,或者,它只是由不知道自己在做什么的人编写的。没有显示NULL的定义,它可能是一些可笑的东西,而不是标准NULL。没有这一点,我们只能说很有可能,但不能证明测试答案是错误的。