赋值运算符的重载

形式:Class_name & Class_name::operator=(const Class_name & other);//接受并返回一个指向类对象的引用。

 

1、赋值运算符的功能以及何时使用它。

将已有的对象赋给另一个对象时,将使用重载的赋值运算符:

StringBad headline1("xxxxxxxx");

.......

StringBad knot;

knot = headline1;//这个地方将使用赋值运算符,默认的赋值运算符同样为浅复制

初始化对象时,并不一定会使用赋值运算符:

StringBad metoo = knot;

这里,metoo是一个新创建的对象,初始化为kont的值,因此这里使用拷贝构造函数。

 

2、赋值的问题出在哪里。

与浅复制拷贝构造函数的的问题相同,1中的knot和headline1对象的地址相同,一但析构其中一个对象,另一个对象的数据将受损。

 

3、解决赋值的问题---重载赋值运算符

Class_name & Class_name::operator=(const Class_name & other){

  if(this == &other) return *this;//防止自赋值浪费资源,并且还会在释放内存时删除对象的内容。

  if(str!=NULL){//清空空间中原有的内容

    delete [] str;

    str = NULL;

  }

  int len = strlen(other.str) + 1;

  str = new char[len];

  memset(str, 0, len);

  strcpy(str, other.str);

  return *this;

}

 

转载于:https://www.cnblogs.com/zhousong918/p/10423846.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值