您的位置:首页 > 其它

析构函数调用 堆指针 删除时 赋值NULL

2011-02-19 11:51 253 查看
指针的值为NULL时,执行delete,系统不会调用析构函数,否则调用析构函数

#include<

>
usingnamespacestd;

classA
{
public:
A(void)
{
cout<<"A::A()默认构造函数"<<endl;
}

~A(void)
{
cout<<"~A::A()析构函数"<<endl;
}
};

int

(void)
{
A*p=newA;//创建一个对象,系统自动调用默认构造函数
deletep;//只要指针的值不为NULL,调用delete操作符,系统自动调用析构函数
deletep;//只要指针的值不为NULL,调用delete操作符,系统自动调用析构函数
deletep;//只要指针的值不为NULL,调用delete操作符,系统自动调用析构函数
p=NULL;

cout<<endl<<endl;
A*pp=newA;
deletepp;//只要指针的值不为NULL,调用delete操作符,系统自动调用析构函数
pp=NULL;
deletepp;//指针pp已经是NULL,调用delete操作符系统不会再调用析构函数了
deletepp;//指针pp已经是NULL,调用delete操作符系统不会再调用析构函数了

system("PAUSE");
returnEXIT_SUCCESS;
}

/*=========================
A::A()默认构造函数
~A::A()析构函数
~A::A()析构函数
~A::A()析构函数

A::A()默认构造函数
~A::A()析构函数
请按任意键继续...
===========================*/




delete本身不会把指针设为NULL

在析构函数中设为NULL可能有点没必要,但养成delete后随手设为NULL据说是个好习惯
恩,谢谢两位!
恩,谢谢两位!
free或delete释放了内存之后,立即将指针设置为NULL,防止

产生“野指针”。
 classA;
A*a=newA;
如果deletea;
a不会为空,而会为0xcccc这类型的吧
所以当你下次用得时候
if(a)a->func();
就会成功,非空的检查就没有用,
所以你最好在deletea;后面加上a=NULL;


来自:http://hi.baidu.com/yu%5Fxiyan/blog/item/90f3aadf0c96861e6227980c.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐