一、题目
如下为类型CMyString的声明,请为该类型添加赋值运算符函数。
class CMyString {
public:
CMyString(char* pData = nullptr);
CMyString(const CMyString& str)'
~CMyString(void);
private:
char* pData;
}
二、代码实现
代码如下(示例):
CMyString & CMystring:: operator=(const CMyString &str) {
if (this != &str) {
CMyString strTemp(str);
char* pTemp = strTemp.pData;
strTemp.pData = pData;
pData = pTemp;
}
return *this;
}
总结
1.是否把返回值类型声明为该类型的引用,并在函数结束前返回实例自身的引用(*this).只有返回一个引用,才可以允许连续赋值。
2.是否把传入的参数的类型声明为常量引用。如果传入的参数不是引用而是实例,那么 从形参到实参会调用一次复制构造函数。
3. 是否释放实例自身已有的内存。
4. 判断传入的参数和当前的实例(*this)是不是同一个实例。