简短不看版:最佳实践
if(pMyClass) //这里, pMyClass是指向某个类的指针 . .
{
delete pMyClass ;
pMyClass = NULL; // 这句不能少
}
完全可以 . . . .
可能有不少人对Delete删除空指针的用法不屑一顾 , 但在实际运用当中 ,
却有不少人会犯类似的错误 , 最典型的如下:
if(pMyClass) //这里, pMyClass是指向某个类的指针 . .
{
delete pMyClass ;
}
他们往往先判断一下指针是否为空 , 如果不为空 , 说明没有被删除 ,
于是清空这个指针 . . .
出发点和逻辑思维是好的 , 但是却毫无必要 . . .
因为实际上delete 本身会自动检查对象是否为空 .如果为空 , 就不做操作 . .
所以直接用delete pMyClass 就可以了 . . .
删除空指针当然也是同样道理 . .
注意:
1. delete NULL 是没有问题的
char *p = NULL;
delete p;
2:delete栈上的空间是不行的
char *p = "1234";
delete p;
2. delete两次不行
char *p = new char;
delete p;
delete p; // 不能删除两次,第一次delete p之后,p的地址并不是空,同一块内存释放两次是有问题的
3. 最好的风格是:
if(pMyClass) //这里, pMyClass是指向某个类的指针 . .
{
delete pMyClass ;
pMyClass = NULL; // 这句不能少
}
因为这段代码在一个函数中,避免函数被调用两次而引起问题