首页 >后端开发 >C++ >移动赋值运算符中是否需要 `this != &rhs` 检查?

移动赋值运算符中是否需要 `this != &rhs` 检查?

Susan Sarandon
Susan Sarandon原创
2024-11-28 19:28:12622浏览

Is a `this != &rhs` Check Necessary in a Move Assignment Operator?

移动赋值运算符和 this != &rhs

在类的标准赋值运算符中,常见的做法是包含 this != &rhs 检查以避免在分配给自身时修改调用对象。但是,在移动赋值运算符中是否需要进行此检查?

答案:

对于移动赋值运算符中是否需要进行此 != &rhs 检查,意见不一。有些人认为始终包含它是一种很好的做法,而另一些人则认为这是不必要的,而且可能有害。

理由:

  • 理由包括检查: 它确保被分配的对象不是调用对象本身,从而防止自赋值。
  • 省略检查的原因: 在移动赋值运算符中,根据定义,调用对象不是对右侧 (RHS) 对象的引用。因此, this != &rhs 检查本质上是正确的并且是不必要的。而且,如果不小心交换了左右方向,检查就会失败,导致未定义的行为。

结论:

最终,是否包含移动赋值运算符中的 this != &rhs 检查取决于个人喜好和上下文。 C 标准并不要求它,但一些开发人员可能会选择包含它以增加安全性或避免无意的自分配。

以上是移动赋值运算符中是否需要 `this != &rhs` 检查?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn