题目:类CMyString的声明如下:
class CMyString
{
public:
CMyString(char* pData = NULL);
CMyString(const CMyString& str);
~CMyString(void);
CMySting & operator=(const CMyString&);
private:
char* m_pData;
};
请实现复制运算符重载函数,要求异常安全:
即当用一个对象赋值发生异常时已有对象不发生改变
代码:
CMyString& CMyString::operator=(const CMyString& str)
{
if(this!=*str)
{
CMyString strtemp(str);
char* temp=strtemp.m_pData;
strtemp.m_pData=m_pData;
m_pData=temp;
}
return *this;
}
这段代码实现了异常安全,创建临时对象strtemp,并且用str进行初始化,若发生异常的话(new)则已经存在的对象不会发生改变,当没有发生异常的时候,会交换两对象的m_pData的值,因为strtemp是在{ }之内创建的局部变量,从而在{ }之外该对象的析构函数就会执行,从而释放原对象占有的m_pData的内存