析构函数调用 堆指针 删除时 赋值NULL
2011-02-19 11:51
253 查看
指针的值为NULL时,执行delete,系统不会调用析构函数,否则调用析构函数
来自:http://hi.baidu.com/yu%5Fxiyan/blog/item/90f3aadf0c96861e6227980c.html
#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; |
来自:
相关文章推荐
- C++析构函数的自动调用(析构函数必须是虚拟的,这样删除父类指针指向的子类对象,才能同时调用两者的析构函数,否则就没有机会调用子类析构函数)
- delete 指针之后 ,只是释放了指针指向的内存空间,指针不会自动置为NULL,还有delete 遇到指针为NULL时不会调用析构函数
- warning C4150: 删除指向不完整“XXX”类型的指针;没有调用析构函数
- delete 指针之后 ,只是释放了指针指向的内存空间,指针不会自动置为NULL,还有delete 遇到指针为NULL时不会调用析构函数
- warning C4150: 删除指向不完整“CBasexxx”类型的指针;没有调用析构函数
- 解释为什么基类的析构函数不为虚的话,基类指针指向子类对象,删除对象时,派生类的析构函数就不会被调用
- 当类的指针被赋值为NULL时,类的哪些成员还可以被该指针调用
- warning C4150: 删除指向不完整“CClient”类型的指针;没有调用析构函数
- 对象删除后,指针要赋值NULL
- 析构函数里对指针成员调用delete
- NULL指针调用成员函数的例子
- 对象指针为NULL,为什么还是可以调用成员函数
- vector用erase删除元素时,为什么被删元素的析构函数会被调用多次?
- C++ 通过null指针调用成员函数 正常
- 函数内空指针调用其他函数赋值
- delete指针以后应赋值为NULL
- 深入C++中构造函数、拷贝构造函数、赋值操作符、析构函数的调用过程总结
- 不理解为什么调用一级指针作函数参数时候,就不能把myp1 = NULL,
- delete指针以后应赋值为NULL
- 浅析C++中的this指针 通过空指针(NULL)可以正确调用一些类的成员函数?