//请实现其赋值运算符的重载函数,要求异常安全,即当对一个对象进行赋值时发生异常,对象的状态不能改变。
思路:
这道题目,我有印象在effective c++中看到过。于是找了一下,就是第11条建议:在operator=中处理“自我赋值”。里面谈到了,重载赋值语句时要注意的问题,包括自我赋值安全和异常安全。一般情况下,实现时一旦注意了异常安全就会具有自我赋值安全。
贴上代码:
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; }其中心思想就是在没有确定已经成功分配晚内存之前,就不要释放之前的内存。当然,也可以采用先生成一个temp内存,然后进行交换的思想来做。