指针非空时,delete运算只释放指针所指的地址空间,不会判断空间是否被占用,delete结束后不会将指针赋值为空。
对同一非空指针delete多次,只有第一次delete被正确执行,之后的delete全部发生异常。
对空指针delete多次可以正常执行。
良好的习惯是,delete运算后手动将指针赋值为空。
测试代码:
#include <iostream>
using namespace std;
int main()
{
int* p=new int;
cout<<"after init:p="<<p<<endl;
delete p;
cout<<"after delete:p="<<p<<endl;
p=NULL;
cout<<"after assign NULL:p="<<p<<endl;
delete p;
cout<<"after delete NULL:p="<<p<<endl;
return 0;
}