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
Freigeben: 2024-11-29 11:55:11
Original
674 Leute haben es durchsucht

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage