指针的值为NULL时,执行delete,系统不会调用析构函数,否则调用析构函数
#include <> using namespace std; class A { public: A( void ) { cout << "A::A( )默认构造函数" << endl; } ~A( void ) { cout << "~A::A( )析构函数" << endl; } }; int ( void ) { A* p = new A; //创建一个对象,系统自动调用默认构造函数 delete p; //只要指针的值不为NULL,调用delete操作符,系统自动调用析构函数 delete p; //只要指针的值不为NULL,调用delete操作符,系统自动调用析构函数 delete p; //只要指针的值不为NULL,调用delete操作符,系统自动调用析构函数 p = NULL; cout << endl << endl; A* pp = new A; delete pp; //只要指针的值不为NULL,调用delete操作符,系统自动调用析构函数 pp = NULL; delete pp; //指针pp已经是NULL,调用delete操作符系统不会再调用析构函数了 delete pp; //指针pp已经是NULL,调用delete操作符系统不会再调用析构函数了 system( "PAUSE" ); return EXIT_SUCCESS; } /*========================= A::A( )默认构造函数 ~A::A( )析构函数 ~A::A( )析构函数 ~A::A( )析构函数 A::A( )默认构造函数 ~A::A( )析构函数 请按任意键继续. . . ===========================*/ delete 本身不会把指针设为 NULL 在析构函数中设为 NULL 可能有点没必要,但养成 delete 后随手设为 NULL 据说是个好习惯 恩,谢谢两位! 恩,谢谢两位! free 或delete 释放了内存之后,立即将指针设置为NULL,防止 产生“野指针”。 class A; A *a = new A; 如果delete a; a不会为空,而会为0xcccc这类型的吧 所以当你下次用得时候 if( a ) a->func( ); 就会成功,非空的检查就没有用, 所以你最好在delete a;后面加上a = NULL; 来自: http://hi.baidu.com/yu%5Fxiyan/blog/item/90f3aadf0c96861e6227980c.html