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;

       }

     

  • 相关阅读:
    centos,ubuntu下安装zabbix遇到的问题
    代理环境下使用 ADDAPTREPOSITORY 添加 PPA 软件源
    Linux文件系统挂载管理
    Log4j配置详解
    myeclipse快捷键
    Linux用户基础(用户和组)
    C语言I博客作业07
    C语言I博客作业02
    C语言I博客作业08
    C语言I博客作业04
  • 原文地址:https://www.cnblogs.com/jian1573/p/3266354.html
Copyright © 2011-2022 走看看