题目:
如下为类型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;
}