> 文章列表 > 【c++ 知识点】delete的异常情况

【c++ 知识点】delete的异常情况

【c++ 知识点】delete的异常情况

delete

  1. delete 栈上指针是不行的。会崩溃。fatal error
int value = 1234;
int *addr = &value;
delete addr;
  1. delete NULL 是可以的。
Parent* p = &parent;
p = NULL;
delete p;
Parent* p = &parent;
p = NULL;
delete p;
delete p;
delete p;

delete 多次也是可以的。

  1. 重复delete 一块本来有地址的指针是不可以的。fatal error
Parent* p = new Parent("Lionel");
delete p;
delete p;
  1. 一般用法
可能有不少人对Delete删除空指针的用法不屑一顾 , 但在实际运用当中 , 却有不少人会犯类似的错误 , 最典型的如下:if(pMyClass) //这里, pMyClass是指向某个类的指针 . .
{delete pMyClass ;
} 
他们往往先判断一下指针是否为空 , 如果不为空 , 说明没有被删除 , 于是清空这个指针 . . .出发点和逻辑思维是好的 , 但是却毫无必要 . . .因为实际上delete 本身会自动检查对象是否为空 .如果为空 , 就不做操作 . . 所以直接用delete pMyClass 就可以了 . . .删除空指针当然也是同样道理 . .
if(p){delete p;p = nullptr;
}

这么写是为了避免,两次delete 一个块内存。