异常安全的赋值运算符函数,可以避免由于内存空间不足,导致new或malloc给m_pData分配内存时分配失败的情况。方法是:创建一个临时实例,再交换临时实例的数据与原来的实例。
class TEST
{
public:
TEST() = default;
TEST(const TEST&) = default;
char *m_pData;
TEST &operator=(const TEST&);
};
TEST& TEST::operator =(const TEST &e)
{
if (this != &e) // 如果不是本身的数据,则将新的数据赋值到this中
{
TEST newT(e); // 拷贝构造函数,构造新的实例newT
char *pTemp = newT.m_pData;
newT.m_pData = this->m_pData;
this->m_pData = pTemp; // newT在函数体结束后析构
}
return *this;
}
原文:https://www.cnblogs.com/xl-cnblog/p/14881021.html