赋值运算符函数

题目:如下为类型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等异常,还没修改原来实例的状态,保证率异常安全。

原文地址:https://www.cnblogs.com/sooner/p/3234274.html