题目的要求是为如下的类型添加赋值运算符函数
class CMyString
{
public:
CMyString(char* pData=nullptr);
CMyString(const CMyString& str);
~CMyString(void);
private:
char* m_pData;
};
需要注意的点
- 赋值运算应该是要允许连续赋值的,因此赋值符号的返回值应该是当前对象的引用
- 形参应该声明为常量引用,否则在传入实参时会因为进行参数的复制构造而浪费了时间和资源
- 赋值后应该释放对象本身的内存,预防内存泄漏的发生
- 需要判断传入的对象与本对象是不是同一个对象,否则释放资源时可能破坏了对象
基于保护原始对象的目的,可以使用中间变量的方式
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; }