Sommaire

Pointeurs faibles

Un pointeur faible (ou référence faible, weak reference en anglais) permet de maintenir une référence forte sur une donnée. En clair, sous réserve que le ramasse-miettes ne soit pas encore intervenu, on peut grâce à une référence faible accéder à une donnée qui aurait été désallouée par le ramasse-miettes avec une référence classique.

.Net propose une classe pour définir un pointeur faible : WeakReference, définie dans l’espace de noms System.

public class WeakReference : ISerializable  
{  
  public WeakReference(object target);  
  public WeakReference(object target, bool trackResurrection);  
  protected WeakReference(SerializationInfo info, StreamingContext context); 
   
  ~WeakReference();  
   
  public virtual bool IsAlive { get; }  
  public virtual bool TrackResurrection { get; }  
  public virtual object Target { get; set; }  
   
  public virtual void GetObjectData(SerializationInfo info, 
StreamingContext context);  
}

Dans l’exemple suivant, on définit une référence faible avec la classe WeakReference autour d’un StringBuilder (étudié en détail dans le chapitre suivant). On sollicite explicitement le ramasse-miettes, mais comme le montre l’écriture dans la console, la valeur est toujours disponible.

using ...