我读过有关避免复制赋值运算符进行半赋值的内容(它在复制项目时引发一些异常,因此赋值的目标达到新旧值混合的状态)。下面的代码提供了解决方案
Matrix& Matrix::operator=(const Matrix& m)
{
Matrix tmp{m};
swap(tmp, *this); // only be called when copy succeeds
return *this;
}
Run Code Online (Sandbox Code Playgroud)
但它首先调用自定义的复制构造函数。为什么复制构造函数不需要像复制赋值运算符那样检查半赋值?