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 ?

Comment éviter une récursivité infinie lors de la surcharge de l'opérateur '==' avec des vérifications nulles ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-08 15:56:41307parcourir

How to Avoid Infinite Recursion When Overloading the '==' Operator with Null Checks?

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!

Déclaration:
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