剑指offer 1 赋值运算符函数

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

class CMyString
{
  public:
     CMyString(char*pData=NULL);
     CMyString(const CMyString&str);//拷贝构造
     CMyString&operator=(const CMyString&str);//赋值构造
     ~CMyString(void);

private:
char*m_pData;
};

1、应该把函数返回值的类型声明为返回类型的引用,以便连续赋值,返回时要 return*this

2、应该把函数参数写为常量且是引用类型,以避免实参向形参传递时调用拷贝构造函数

3、函数体内应先释放实例自己的内存。如果忘记释放自身已有内存,将导致内存泄露

4、函数体内应判断传入的参数和当前实例(*this)是否是同一个。

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

猜你喜欢

转载自blog.csdn.net/weixin_41413441/article/details/81544067