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

指针的值为NULL时,执行delete,系统不会调用析构函数,否则调用析构函数

#include <防止批量抓取,复制程序时,把iostream加上去>
using namespace std;

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

int 防止批量抓取,复制程序时,把main加上去( 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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值