C++中重载赋值运算符应该注意的地方

C++中自定义的类一般都会重载赋值运算函数,重载时候应该注意一下几点:

1. 返回类型
  • 必须为该类型的引用
    • 原因:必须返回一个引用,才可以允许连续赋值 ;
  • 必须返回自身实例的引用(*this)
2. 参数
  • 传入参数申明为常量引用
    • 如果传入的参数不是引用而是实例,那么从形参到实参会调用一次复制构造函数;
  • 传入参数和当前的实例(*this)是否为同一实例.
3. 释放实例自身已有的类型,防止内存泄露;

4. 考虑当因内存不足在new char时候抛出异常
以string为例,以下为两个版本的重载赋值运算符的代码:
string& string::operator=(const string& str){
      if( this==&str )
            return *this;
      delete []data;
      m_data = null;
      m_data = new char[ strlen(str.data)+1] ;
       strcpy(data, str.data);
       return *this;
}
delete后 防止 因空间不足导致new char失败导致的异常;
string& string::operator=(const string& str){
     if( this != &str){
          string temp(str);
          char *p = temp.data;
          temp.data = data;
          data = p;
      }
      return *this;
}

Reference
《effective c++》 item 5 -- 12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值