Maison >développement back-end >C++ >Comment éviter une récursivité infinie lors de la surcharge de l'opérateur '==' avec des vérifications nulles ?
Gérer correctement les vérifications nulles pour éviter une récursion infinie dans les surcharges d'opérateurs '=='
Lors de la surcharge de l'opérateur '==', assurez-vous de gérer correctement les vérifications nulles pour éviter une récursion infinie. L'extrait de code fourni dans la question montre une approche incorrecte :
<code>if (foo1 == null) return foo2 == null;</code>
Cette condition provoque une récursion infinie car le deuxième appel à == tentera à nouveau de vérifier si foo1 est vide, provoquant une boucle infinie.
Code correct
Pour résoudre ce problème et éviter une récursion infinie, utilisez object.ReferenceEquals
pour la vérification nulle :
<code>if (object.ReferenceEquals(foo1, null)) return object.ReferenceEquals(foo2, null);</code>
Cette condition gère correctement le cas où foo1 ou foo2 (ou les deux) est vide. Renvoie vrai si les deux opérandes sont vides ; renvoie faux si un ou les deux opérandes ne sont pas vides.
Correction complète
Le code corrigé ci-dessous intègre cette modification dans la surcharge d'opérateur fournie :
<code>public static bool operator ==(Foo foo1, Foo foo2) { if (object.ReferenceEquals(foo1, null)) return object.ReferenceEquals(foo2, null); return foo1.Equals(foo2); }</code>
Avec ce changement, la surcharge des opérateurs sera capable de gérer correctement les vérifications nulles sans provoquer de récursion infinie.
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!