Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Comprendre les Pointeurs Faibles | Pointeurs Faibles
Pointeurs Intelligents C++
course content

Contenu du cours

Pointeurs Intelligents C++

Pointeurs Intelligents C++

1. Introduction aux Pointeurs Intelligents
2. Pointeurs Uniques
3. Pointeurs Partagés
4. Pointeurs Faibles
5. Références
6. Sujets Avancés

book
Comprendre les Pointeurs Faibles

Les pointeurs faibles sont un type de pointeur intelligent ajouté à C++ pour résoudre des problèmes, comme les références circulaires, qui peuvent survenir lors de l'utilisation de pointeurs partagés. Tout comme les pointeurs uniques et partagés, ils font partie du fichier d'en-tête <memory> et sont définis dans l'espace de noms std.

Remarque

Le pointeur intelligent std::weak_ptr ne possède pas l'objet auquel il pointe. Cela signifie essentiellement qu'un pointeur faible n'augmente pas le compteur de références de l'objet.

Le principal objectif des pointeurs faibles est de fournir un moyen d'accéder à un objet qui pourrait être possédé par plusieurs pointeurs partagés, sans prolonger la durée de vie de cet objet.

Exemple

Imaginons que nous ayons un objet vers lequel pointent quatre pointeurs partagés. Si nous ajoutons ensuite un pointeur faible qui pointe vers le même objet, cela n'affectera pas l'existence de l'objet. En effet, les pointeurs faibles n'ont pas d'influence sur le maintien ou non de l'objet. Ainsi, lorsque tous les pointeurs partagés sortent de portée ou sont réinitialisés, l'objet sera supprimé, même si le pointeur faible est toujours présent.

Ce comportement des pointeurs faibles peut être particulièrement utile lorsque vous souhaitez surveiller un objet partagé dynamique, mais ne voulez pas prolonger artificiellement son existence. Par exemple, supposons qu'il y ait un compteur de ressources partagées que vous souhaitez accéder depuis une classe observatrice. En utilisant un pointeur faible, l'observateur peut accéder au compteur pour lire sa valeur sans influencer le moment où le compteur est désalloué. Le compteur vit et meurt selon les règles de ses pointeurs partagés, et non des pointeurs faibles qui l'observent.

Le cycle de vie d'un pointeur faible

Les pointeurs faibles sont des observateurs. Ils peuvent observer et accéder à l'objet, mais leur observation n'affecte pas la durée de vie de l'objet.

Le cycle de vie d'un pointeur faible est lié au cycle de vie de l'objet, qui est géré par des pointeurs partagés. Lorsque le dernier pointeur partagé vers l'objet associé est détruit, l'objet est désalloué. Le pointeur faible n'empêche pas cette désallocation. Après la destruction, le pointeur faible entre dans un état de vide ; il existe toujours mais est maintenant considéré comme expiré.

Analogie du monde réel

Pensez à un pointeur faible comme à un billet pour un événement. Tant que l'événement est en cours (l'objet est vivant), vous pouvez utiliser le billet pour entrer (accéder à l'objet). Cependant, le billet lui-même ne maintient pas l'événement en cours (n'étend pas la durée de vie de l'objet). Si l'événement se termine (l'objet est détruit), votre billet devient sans valeur (le pointeur faible devient invalide).

Supposons qu'il y ait 10 pointeurs partagés et 1 pointeur faible pointant vers une ressource dynamique. Après un certain temps, les 10 pointeurs partagés sortent de portée, ne laissant que le 1 pointeur faible. Le destructeur de la ressource dynamique sera-t-il appelé à ce moment-là ?

Supposons qu'il y ait 10 pointeurs partagés et 1 pointeur faible pointant vers une ressource dynamique. Après un certain temps, les 10 pointeurs partagés sortent de portée, ne laissant que le 1 pointeur faible. Le destructeur de la ressource dynamique sera-t-il appelé à ce moment-là ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 1
We're sorry to hear that something went wrong. What happened?
some-alt