《剑指offer》面试题1:赋值运算符函数

题目的要求是为如下的类型添加赋值运算符函数

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

需要注意的点

  1. 赋值运算应该是要允许连续赋值的,因此赋值符号的返回值应该是当前对象的引用
  2. 形参应该声明为常量引用,否则在传入实参时会因为进行参数的复制构造而浪费了时间和资源
  3. 赋值后应该释放对象本身的内存,预防内存泄漏的发生
  4. 需要判断传入的对象与本对象是不是同一个对象,否则释放资源时可能破坏了对象
  5. 基于保护原始对象的目的,可以使用中间变量的方式

    CMyString& CMyString::operator = (const  CMyString& other)
    {
       if(this!=&other){
           CMyString tmp(other);
    
           char* p_tmp = tmp.m_pData;
           tmp.m_pData = p_Data;
           p_Data = p_tmp;
       }
       return *this;
    }

猜你喜欢

转载自blog.csdn.net/acelove40/article/details/79729414