在这个关于复制和交换习惯用语的真正有趣的response中,我们提到我们创建一个swap()
方法,以便在创建赋值运算符时避免代码重复数据删除,当我们已经有工作副本构造函数和析构函数。
为了不仅仅为此目的创建swap()
方法,为什么不直接通过调用析构函数(this->~MyClass()
,而不是使用关键字delete
)来实现赋值运算符通过展示位置new
调用复制构造函数?
考虑例外保证:
如果赋值失败并带有异常(复制和交换版本也会调用复制构造函数),那么继续使用旧状态的对象仍然是个好主意吗?我的意思是此时调用者不再计划使用旧对象,因为他有一个新对象。