ホームページ >バックエンド開発 >C++ >移動代入演算子に「this != &rhs」チェックは必要ですか?

移動代入演算子に「this != &rhs」チェックは必要ですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-28 19:28:12646ブラウズ

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

移動代入演算子と this != &rhs

クラスの標準代入演算子では、this != を含めるのが一般的です。 &rhs は、それ自体に割り当てるときに呼び出し元のオブジェクトが変更されるのを避けるためにチェックします。しかし、このチェックは移動代入演算子で必要ですか?

答え:

この != &rhs チェックが移動代入演算子で必要かどうかについては意見が異なります。これを常に含めるのが良い習慣であると主張する人もいますが、それは不必要で潜在的に有害であると考える人もいます。

根拠:

  • 理由チェックを含めるには: 割り当てられているオブジェクトが呼び出しオブジェクト自体ではないことを保証し、 self-assignment.
  • チェックを省略する理由: 移動代入演算子では、定義上、呼び出しオブジェクトは右側 (RHS) オブジェクトへの参照ではありません。したがって、この != &rhs チェックは本質的に true であり、不要です。また、誤って RHS と LHS を入れ替えるとチェックが失敗し、未定義の動作が発生します。

結論:

最終的には含めるかどうか移動代入演算子の != &rhs チェックは、個人的な好みと状況によって異なります。これは C 標準では必須ではありませんが、一部の開発者は安全性を高めるため、または意図しない自己割り当てを避けるためにこれを含めることを選択する場合があります。

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

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