zoukankan      html  css  js  c++  java
  • =号重载的注意事项

     

    对于以下类中重载的=号,这可能是大家常采用的写法:

    class tmp

    {

    private:

       char* strTmp;

       int m_iLength;

    public:

       tmp(){ strTmp = NULL; }

       ~tmp(){ DelStr(); }

       void InitStr(char* str,int iLength)

       {

          if( (NULL == str)|| (0==iLength)) return;

     

          strTmp = new char[iLength];

     

          strcpy(strTmp,str);

     

          m_iLength = iLength;

       }

     

       void DelStr()

       {

          if(NULL!=strTmp) delete[] strTmp;

     

          strTmp = NULL; 

          m_iLength = 0;

       }

       tmp& operator =(tmp& Copy)

      {

          DelStr();

          InitStr(Copy.strTmp,Copy.m_iLength);

          return *this;

       }

     

     

     

     

    这段代码的主要问题出在=号的重载上面:

       DelStr();

       InitStr(Copy.strTmp,Copy.m_iLength); 

       return *this;

    }

    这样的错误可能大家都会犯,而且往往会不以为然,考虑下面的一段调用:

    tmp xx;

    char *Mystr = new char[100];

    strcpy(Mystr,"abcd");

    xx.InitStr(Mystr,5);

    xx = xx;//这一句的结果会是什么??

    显然执行完成后,xx的内容被清空了!!!

    正确的写法:

       tmp& operator =(tmp& Copy)

       {

          if(this == &Copy)

     

             return *this;

     

          DelStr();

          InitStr(Copy.strTmp,Copy.m_iLength);

     

          return *this;

       }

     

  • 相关阅读:
    oeong.xyz
    Layui将前端数据传到PHP后台
    软件工程 —— 个人总结
    Beta冲刺 —— 个人总结
    小黄衫的故事
    Alpha冲刺 —— 个人总结
    Python实现批量MD5加密
    修改电脑快捷键
    第三次个人作业 —— 用例图设计
    crontab定时任务
  • 原文地址:https://www.cnblogs.com/jian1573/p/3266354.html
Copyright © 2011-2022 走看看