Maison > développement back-end > C++ > Les gestionnaires d'événements empêcheront-ils le garbage collection de mes objets ?

Les gestionnaires d'événements empêcheront-ils le garbage collection de mes objets ?

Patricia Arquette
Libérer: 2025-01-26 23:51:12
original
665 Les gens l'ont consulté

Will Event Handlers Prevent Garbage Collection of My Objects?

Les gestionnaires d'événements interfèrent-ils avec le garbage collection ?

Question :

Considérez le code suivant :

<code class="language-c#">MyClass pClass = new MyClass();
pClass.MyEvent += MyFunction;
pClass = null;</code>
Copier après la connexion

La pClass sera-t-elle collectée ? Ou va-t-il persister et continuer à déclencher des événements ? Devez-vous vous désinscrire des événements comme celui-ci :

<code class="language-c#">MyClass pClass = new MyClass();
pClass.MyEvent += MyFunction;
pClass.MyEvent -= MyFunction;
pClass = null;</code>
Copier après la connexion

Réponse :

Collecte des déchets par éditeur d'événement :

L'abonnement à MyEvent n'affecte pas le garbage collection de pClass (éditeur).

Collecte des déchets de l'objet cible :

En général, le comportement du garbage collection dépend du fait que MyFunction soit une méthode d'instance ou une méthode statique :

  • Méthodes d'instance : L'abonnement de MyFunction à MyEvent inclut une référence à MyClass. Par conséquent, cela peut empêcher le garbage collection de l’objet cible. Toutefois, ce problème cesse une fois que l'objet éditeur devient éligible à la collection.
  • Méthodes statiques : Les événements statiques n'empêchent pas l'objet cible d'être récupéré.

Autres notes :

  • Si l'éditeur (par exemple, pClass) a une longue durée de vie et survit à l'objet cible (par exemple, l'objet contenant MyFunction), vous devez vous désinscrire pour vous assurer que l'objet cible peut être récupéré.
  • Les événements statiques sont particulièrement dangereux lorsqu'ils sont utilisés conjointement avec des gestionnaires basés sur des instances, car ils peuvent empêcher indéfiniment le garbage collection de l'objet cible.

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