题目:如下为类型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等异常,还没修改原来实例的状态,保证率异常安全。