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!