要想在赋值运算符函数中实现异常安全,我们有两种做法。
一 先用new分配新内容,再用delete删除已有的内容。这样只在分配内容成功后再释放原来的内容,也就是分配内存失败时,原来的实例不会被修改。
二 先创建一个临时实例,在交换临时实例和原来的实例交换。
CMyStrig &CMyString::operator=(const CMyString &str)
{
if (this != &str)
{
CMyString strTmp(str);
char *pTmp = strTmp.data;
strTmp.data = data;
data = pTmp;
}
return *this;
}