ホームページ >バックエンド開発 >C++ >「if (this != &rhs)」チェックを移動代入演算子に含めるべきでしょうか?

「if (this != &rhs)」チェックを移動代入演算子に含めるべきでしょうか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-29 11:55:11655ブラウズ

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

代入演算子と if (this != &rhs)

クラスの代入演算子では、これが一般的な方法です。潜在的なエラーを回避するために、割り当てられているオブジェクトが呼び出しオブジェクトであるかどうかを確認します。これは、条件 if (this != &rhs) を使用して行われます。

ただし、移動代入演算子のコンテキストでは、特に右側 (RHS) が右辺値参照である場合 (次のように) Class&&) では、このチェックが必要かどうかという疑問があります。

右辺値参照は常に、参照することのできない一意の一時オブジェクトを参照するため、チェックは必要ないと主張する人もいます。別の場所で別名が付けられます。この場合、この != &rhs は常に true です。

標準では厳密に要求されていないにもかかわらず、防御手段としてチェックが依然として推奨されると主張する人もいます。彼らは、これにより追加の保証が提供され、クライアント コードが誤って自己参照を渡した場合に潜在的なバグや未定義の動作が防止されると主張しています。

一般的なコンセンサスは、このチェックは移動のコンテキストでは厳密には必要ではないようです。割り当てですが、それも有害ではありません。移動の割り当てが一般的なコピーとスワップのイディオムを使用して実装されている場合は、チェックを含めるのが一般的です。ただし、移動の割り当てがコピーとスワップなしで実装されている場合、チェックは省略できます。

最終的に、チェックを含めるかどうかの決定は、個人の好みと設計上の考慮事項です。

以上が「if (this != &rhs)」チェックを移動代入演算子に含めるべきでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。