测试答案是错的,对吗?它不会崩溃,因为我们删除NULL指针,这是安全的
Test answer is wrong yes? It will not crash as we delete NULL pointer which is safe
考虑以下代码:
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>
,它负责删除。
相关文章:
- 我们可以删除链表中静态内存中的节点吗
- 为什么我们甚至需要删除运算符?(我们不能只使用删除[]吗)
- 我们可以在范围循环中使用引用(而不是指针)上的删除
- C++:如果我们在字符串中添加一些整数,为什么它会从开头删除该数量的字符?(字符串 + 整数)
- 我们需要删除对非新对象的引用吗
- 尽管使用了 boost::scoped_ptr,我们是否应该删除析构函数中成员的指针
- 我们可以通过指向其基类之一的指针来执行删除对象吗?
- 如果我们无法从C++容器中删除元素,我们该怎么办
- 为什么我们需要删除复制赋值运算符中的指针
- 如果我们只定义复制构造函数/oper=,为什么移动构造函数/move赋值没有隐式声明和定义为删除
- Qt 我们是否应该删除在 QNetworkAccessManager SIGNAL 上收到的 QNetworkReply
- 为什么我们不能删除初始化的指针?
- 为什么我们可以向新表达式传递可选参数,而不能删除表达式
- 如果我们不删除内存并且应用程序已退出,是否存在内存泄漏
- 我们可以在C++中删除一个变量的名称吗
- 测试答案是错的,对吗?它不会崩溃,因为我们删除NULL指针,这是安全的
- 双指针内存检查,我们是否需要单独删除两者
- 如果我们不使用删除对象会发生什么
- 我们可以通过函数中的值返回具有已删除/私有复制/移动构造函数的对象吗
- 内存运行时错误:我们在哪里删除这个指针