Maison > développement back-end > C++ > La vérification « if (this != &rhs) » doit-elle être incluse dans un opérateur d'affectation de déplacement ?

La vérification « if (this != &rhs) » doit-elle être incluse dans un opérateur d'affectation de déplacement ?

Patricia Arquette
Libérer: 2024-11-29 11:55:11
original
666 Les gens l'ont consulté

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

Déplacer l'opérateur d'affectation et if (this != &rhs)

Dans l'opérateur d'affectation d'une classe, c'est une pratique courante pour vérifier si l'objet attribué est l'objet appelant afin d'éviter des erreurs potentielles. Cela se fait en utilisant la condition if (this != &rhs).

Cependant, dans le contexte de l'opérateur d'affectation de déplacement, en particulier lorsque le côté droit (RHS) est une référence rvalue (comme Class&&), la question se pose de savoir si cette vérification est nécessaire.

Certains soutiennent que la vérification n'est pas obligatoire car une référence rvalue fait toujours référence à un objet unique et temporaire qui ne peut pas être alias. autre part. Dans ce cas, this != &rhs est toujours vrai.

D'autres soutiennent que le contrôle est toujours conseillé comme mesure défensive, même s'il n'est pas strictement requis par la norme. Ils affirment que cela apporte une garantie supplémentaire et évite d'éventuels bugs ou comportements indéfinis si le code client passe par erreur une auto-référence.

Le consensus général semble être que la vérification n'est pas strictement nécessaire dans le cadre d'un déménagement. mission, mais ce n'est pas non plus nuisible. Si l'affectation de déplacement est implémentée à l'aide de l'idiome populaire Copy and Swap, il est courant d'inclure la vérification. Cependant, si l'affectation de déplacement est mise en œuvre sans copie et échange, la vérification peut être omise.

En fin de compte, la décision d'inclure ou non la vérification est une question de préférence personnelle et de considérations de conception.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal