zoukankan      html  css  js  c++  java
  • 赋值运算符函数

    题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数。

    class CMyString
    {
          public:
                 CMyString(char *pData=NULL);
                 CMyString(const CMyString& str);
                 ~CMyString(void);
          private:
                  char *m_pData;       
    }

    1、经典解法,初级程序员:

    CMyString& CMyString::operator =(const CMyString &str)
    {
          if(this==&str)
              return *this;
              
          delete []m_pData;
          m_pData=NULL;
          
          m_pData=new char[strlen(str.m_pData)+1];
          strcpy(m_pData,str.m_pData);
          
          return *this;    
    }

    2、考虑异常安全的解法,高级程序员:

    CMyString& CMyString::operator =(const CMyString &str)
    {
          if(this!=str)
          {
              CMyString strTemp(str);
              
              char* pTemp = strTemp.m_pData;
              strTemp.m_pData=m_pData;
              m_pData=pTemp;
          }
          return *this;    
    } 

    在CMyString的构造函数里调用new分配内存,如果内存不足抛出诸如bad_alloc等异常,还没修改原来实例的状态,保证率异常安全。

  • 相关阅读:
    Oracle 查看表空间的使用情况SQL语句
    汇总查询
    conky配置2
    数据库更新
    weka简介和回归转自chinakdd
    子查询
    ubuntu常用命令
    查询
    数据库中的连接
    测试用的数据库表及其数据
  • 原文地址:https://www.cnblogs.com/sooner/p/3234274.html
Copyright © 2011-2022 走看看