首页 >后端开发 >C++ >'if (this != &rhs)”检查是否应该包含在移动赋值运算符中?

'if (this != &rhs)”检查是否应该包含在移动赋值运算符中?

Patricia Arquette
Patricia Arquette原创
2024-11-29 11:55:11666浏览

Should the `if (this != &rhs)` Check Be Included in a Move Assignment Operator?

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

在类的赋值运算符中,这是常见的做法检查正在分配的对象是否是调用对象以避免潜在的错误。这是使用条件 if (this != &rhs) 完成的。

但是,在移动赋值运算符的上下文中,特别是当右侧 (RHS) 是右值引用时(例如Class&&),有一个问题是这个检查是否必要。

有些人认为不需要检查,因为右值引用总是引用一个唯一的、临时的对象,不能被在别处别名。在这种情况下,这个 != &rhs 始终为真。

其他人认为,尽管标准没有严格要求,但检查作为防御措施仍然是可取的。他们断言,如果客户端代码错误地传递自引用,它可以提供额外的保证并防止潜在的错误或未定义的行为。

普遍的共识似乎是,在 move 的上下文中,检查并不是严格必要的分配,但它也没有害处。如果移动分配是使用流行的复制和交换习惯用法实现的,则通常的做法是包含检查。但是,如果在没有 Copy 和 Swap 的情况下实现移动分配,则可能会省略检查。

最终,是否包含检查的决定取决于个人喜好和设计考虑。

以上是'if (this != &rhs)”检查是否应该包含在移动赋值运算符中?的详细内容。更多信息请关注PHP中文网其他相关文章!

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