zoukankan      html  css  js  c++  java
  • 赋值运算符的重载

    形式: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;

    }

  • 相关阅读:
    247. Strobogrammatic Number II 倒过来看也一样的数
    性能测试结果分析
    性能测试文档
    性能测试技术
    性能测试流程
    JMeter(7)插件
    Java同步工具类
    线程池
    死锁
    Lock显示锁
  • 原文地址:https://www.cnblogs.com/zhousong918/p/10423846.html
Copyright © 2011-2022 走看看