指针的值为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; |