operator= 要注意避免内存泄露(项目经验)

指针不论是指向malloc还是new分配得到的内存,一定要注意在改变指针指向之前一定要先释放旧的内存块。

class  Test
{
public :
                  Test ()
                {
                                  if  ( p  !=  NULL )
                                {
                                                  free ( p  );
                                                  p  =  NULL  ;
                                }
                                  p  = ( char  *) malloc (  sizeof ( char  ));
                }
                  Test ( const  Test  &  C1 )
                {
                                  cout  <<  "ooo我在进行拷贝构造"  <<  endl ;
                                  p  = ( char  *) malloc (  sizeof ( char  ));
                                *  p  = * C1  . p ;
                }
                ~  Test ()
                {
                                  cout  <<  "ooo我在析构"  <<  endl ;
                                  if  ( p  != NULL )
                                {
                                                  free ( p  );
                                                  p  =  NULL  ;
                                }
                }
                  void  operator=( Test  & C2 )
                {
                                 if (p !=NULL)
                                {
                                                 free(p );
                                                 p = NULL ;
                                } 
                //这里很重要,A=B时,A本身已经malloc了一块内存,如果此时没有              
                  free,直接执行下面一句让p指向另一块内存,那么之前malloc出来的     
                  内存如何释放?
                                  p  = ( char  *) malloc (  sizeof ( char  ));
                                           * p = *C2.p;
                }
private :
                  char  * p  ;
};
void  main  ()
{
                  Test  A  ;
                  Test  B  ;
                  A  =  B  ; //这里要注意,直接“=”的情况下不会调用拷贝构造函数,要用=重载来避免浅拷贝
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值