赋值运算符函数

当写一个赋值运算符函数时,首先要关注几点(第一种写法):

1.返回值的类型是不是应该声明为该类型的引用,并在函数结束前返回实例自身的引用,只有这样,才支持连续赋值例如3个list的实例l1,l2,l3,语句l1=l2=l3编译通过。

2.实例自身已有的内存是不是应该释放,如果在分配内存之前没有释放,程序将出现内存泄漏。

3.传入的参数是不是应该应该声明为常量引用以避免实参传给形参时调用拷贝构造函数的无谓消耗。

4.是不是应该判断this跟传入的形参是否为同一个实例,否则,当两者为同一个实例时,当释放了原来的内存后,就找不着需要赋值的内容了。

例:(string的赋值运算符重载)

String:String& operator=(const String & str)
{
    if(this !=&str)
        return *this;
    char *tmp=new char[strlen(str._str)+1];  //用临时变量指向新开辟的空间,避免了开辟新空间失败时对原实例的破环(对原实例开辟空间先得释放原来的内存)
    strcpy(tmp,str._str);
    delete[]_str;
    _str=tmp;
    return *this;
}

第二种:

传入的参数直接声明一个实例

例:(string的赋值运算符重载)

String:String & operator(String str)
{
    swap(_str,str._str);
    return *this;
}

当是这种类型的时候就不用管内存释放问题,它会调用析构函数。



                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值