1、赋值运算函数
代码考察点:
- 函数返回值是否是该类型的引用,并在函数结束前返回实例自身的引用(*this)
- 传入参数是否是常量引用:避免直接传入实例引起的形参到实参的复制构造函数的无谓消耗,加const 是因为不会改变传入实例的状态
- 是否释放实例自身占有的内存:申请新内存时候需要先释放内存
- 判断传入参数和当前实例是否是一个,如果是则不进行赋值运算,避免两者相同时候,
释放自身将需要赋值的也释放了。
CMyString& CMyString::operator=(const CMyString &str) //考察点1,2
{
if(this==&str)
return *this; //考察点4
delete []m_pData;
m_[Data=nullptr; //考察点3
m_pData=new char[strlen(str.m_Data)+1];
strcpy(m_Data,str.m_Data);
return *this;
}