Heim >Backend-Entwicklung >C++ >Sollte die Prüfung „if (this != &rhs)' in einem Verschiebungszuweisungsoperator enthalten sein?

Sollte die Prüfung „if (this != &rhs)' in einem Verschiebungszuweisungsoperator enthalten sein?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-29 11:55:11656Durchsuche

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

Zuweisungsoperator verschieben und if (this != &rhs)

Im Zuweisungsoperator einer Klasse ist dies eine gängige Praxis um zu prüfen, ob das zugewiesene Objekt das aufrufende Objekt ist, um mögliche Fehler zu vermeiden. Dies geschieht mit der Bedingung if (this != &rhs).

Im Kontext des Verschiebungszuweisungsoperators, insbesondere wenn die rechte Seite (RHS) eine R-Wert-Referenz ist (z. B Klasse&&) stellt sich die Frage, ob diese Prüfung notwendig ist.

Einige argumentieren, dass die Prüfung nicht erforderlich ist, da sich eine R-Wert-Referenz immer auf ein eindeutiges, temporäres Objekt bezieht, das nicht sein kann an anderer Stelle als Pseudonym verwendet. In diesem Fall ist das != &rhs immer wahr.

Andere argumentieren, dass die Prüfung als Abwehrmaßnahme immer noch ratsam ist, auch wenn sie vom Standard nicht unbedingt gefordert wird. Sie behaupten, dass es eine zusätzliche Garantie bietet und potenzielle Fehler oder undefiniertes Verhalten verhindert, wenn der Client-Code versehentlich eine Selbstreferenz übergibt.

Der allgemeine Konsens scheint darin zu bestehen, dass die Prüfung im Kontext von Verschiebungen nicht unbedingt notwendig ist Aufgabe, aber es ist auch nicht schädlich. Wenn die Verschiebungszuweisung mithilfe der beliebten Copy-and-Swap-Sprache implementiert wird, ist es gängige Praxis, die Prüfung einzubeziehen. Wenn die Umzugszuweisung jedoch ohne Kopieren und Tauschen implementiert wird, kann die Prüfung entfallen.

Letztendlich ist die Entscheidung, ob die Prüfung einbezogen werden soll oder nicht, eine Frage persönlicher Vorlieben und Designüberlegungen.

Das obige ist der detaillierte Inhalt vonSollte die Prüfung „if (this != &rhs)' in einem Verschiebungszuweisungsoperator enthalten sein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn