赋值运算符函数

时间:2022-01-21 01:40:38

题目:如下为类型CMyString的声明,请为该类型添加赋值运算符函数。

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

1、经典解法,初级程序员:

CMyString& CMyString::operator =(const CMyString &str)
{
if(this==&str)
return *this;

delete []m_pData;
m_pData
=NULL;

m_pData
=new char[strlen(str.m_pData)+1];
strcpy(m_pData,str.m_pData);

return *this;
}

2、考虑异常安全的解法,高级程序员:

CMyString& CMyString::operator =(const CMyString &str)
{
if(this!=str)
{
CMyString strTemp(str);

char* pTemp = strTemp.m_pData;
strTemp.m_pData
=m_pData;
m_pData
=pTemp;
}
return *this;
}

在CMyString的构造函数里调用new分配内存,如果内存不足抛出诸如bad_alloc等异常,还没修改原来实例的状态,保证率异常安全。