À retenir
- N'augmente pas le compteur de références d'un objet.
- Empêche les fuites de mémoire dues aux cycles infinis.
- Nécessite une vérification de présence avant chaque lecture.
Un pointeur faible est une référence vers un objet qui n'empêche pas sa suppression par le système de gestion de la mémoire. Contrairement à un pointeur classique, il permet d'observer un objet sans en devenir le « propriétaire » : si plus personne d'autre n'utilise l'objet, celui-ci est détruit même si le pointeur faible existe encore.
Étymologie
Le terme vient de l'anglais weak pointer. Le mot « pointeur » désigne une variable qui contient l'adresse mémoire d'une donnée, et l'adjectif « faible » souligne que ce lien n'a pas assez de force pour maintenir la donnée en vie artificiellement.
Exemples d'usage
- C++ (std::weak_ptr) : Utilisé pour casser des cycles de références entre deux objets qui se pointent mutuellement.
- Java (WeakReference) : Employé pour créer des caches de données qui s'effacent d'elles-mêmes quand la mémoire devient insuffisante.
- Swift : Utilisation du mot-clé
weakpour éviter que deux instances de classes ne se bloquent mutuellement en mémoire (fuite mémoire).
Cas d'usage
On l'utilise principalement dans le développement d'applications complexes pour gérer les relations entre objets. Il est indispensable pour implémenter des systèmes de cache, des observateurs (pattern Observer) ou pour résoudre le problème des références circulaires où deux éléments s'empêchent mutuellement d'être libérés.
Bonnes pratiques
Il est impératif de vérifier si l'objet pointé existe toujours avant d'essayer d'y accéder, car il peut avoir été supprimé entre-temps. En programmation, on effectue généralement une opération de « verrouillage » (lock) pour transformer temporairement le pointeur faible en pointeur fort le temps de son utilisation.
Synonymes
Antonymes
Conseil
Si vous débutez, retenez que le pointeur faible est comme un post-it indiquant l'emplacement d'un livre en bibliothèque : vous pouvez aller voir si le livre y est, mais votre post-it n'empêche pas le bibliothécaire de ranger ou de prêter le livre à quelqu'un d'autre.
Questions fréquentes
Quelle est la différence avec un pointeur fort ?
Un pointeur fort garantit que l'objet reste en mémoire tant qu'il existe, tandis qu'un pointeur faible laisse l'objet être supprimé s'il n'a plus de propriétaires 'forts'.
Que se passe-t-il si j'accède à un pointeur faible dont l'objet est supprimé ?
Le programme renverra généralement une valeur nulle (null) ou une erreur spécifique, évitant ainsi un plantage grave si le développeur a prévu le test.