Maison >développement back-end >C++ >Comment empêcher une récursivité infinie lors de la surcharge de l'opérateur == avec des valeurs nulles ?

Comment empêcher une récursivité infinie lors de la surcharge de l'opérateur == avec des valeurs nulles ?

DDD
DDDoriginal
2025-01-08 16:07:41758parcourir

How to Prevent Infinite Recursion When Overloading the == Operator with Null Values?

Gestion des valeurs nulles lors de la surcharge de l'opérateur ==

Dans certains cas, essayer de surcharger l'opérateur == avec le code suivant peut entraîner une récursivité infinie :

<code class="language-c#">Foo foo1 = null;
Foo foo2 = new Foo();
Assert.IsFalse(foo1 == foo2);

public static bool operator ==(Foo foo1, Foo foo2) {
    return foo1 == null ? foo2 == null : foo1.Equals(foo2);
}</code>

Le problème est que sans vérification spécifique des valeurs nulles, la comparaison == appelle récursivement la méthode surchargée de l'opérateur == pour comparer foo1 et foo2. Puisque foo1 est vide, une boucle récursive est déclenchée.

Pour résoudre ce problème, vous pouvez utiliser ReferenceEquals pour ajouter une vérification de valeur nulle :

<code class="language-c#">Foo foo1 = null;
Foo foo2 = new Foo();
Assert.IsFalse(foo1 == foo2);

public static bool operator ==(Foo foo1, Foo foo2) {
    if (object.ReferenceEquals(null, foo1))
        return object.ReferenceEquals(null, foo2);
    return foo1.Equals(foo2);
}</code>

En utilisant ReferenceEquals pour vérifier les valeurs nulles, vous vous assurez que la méthode surchargée de l'opérateur == ne se reproduit pas indéfiniment, permettant ainsi de gérer les comparaisons nulles avec élégance.

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