Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Création et Utilisation des Pointeurs Faibles | Pointeurs Faibles
Pointeurs Intelligents C++

bookCréation et Utilisation des Pointeurs Faibles

Création de Weak Pointers

Vous devriez généralement créer un std::weak_ptr à partir d'un std::shared_ptr existant. Cela garantit que le weak pointer observe un objet déjà géré par au moins un shared pointer.

creating_weak_pointer.h

creating_weak_pointer.h

copy
12
std::shared_ptr<int> p_shared = std::make_shared<int>(42); std::weak_ptr<int> p_weak(sharedPtr);

Le std::weak_ptr p_weak est construit à partir d'un std::shared_ptr existant p_shared. Cela signifie que p_weak n'augmente pas le compteur de référence de p_shared mais observe plutôt le même objet géré. La validité de p_weak dépend de p_shared; si toutes les instances de std::shared_ptr gérant l'objet sont détruites, p_weak expire et ne peut plus être utilisé pour accéder directement à l'objet.

Utilisation des pointeurs faibles

Pour accéder à un objet géré par un std::weak_ptr, vous devez d'abord le convertir en un std::shared_ptr en utilisant lock(). Cette méthode vérifie si l'objet est toujours vivant et renvoie un std::shared_ptr vers celui-ci, sinon, elle renvoie un std::shared_ptr vide.

Verrouiller un pointeur faible empêche l'objet d'être détruit pendant son utilisation. Étant donné que std::weak_ptr ne contribue pas au compteur de références, accéder directement à l'objet risquerait d'utiliser une instance détruite. Le convertir en un std::shared_ptr augmente le compteur de références, garantissant que l'objet reste valide pendant son utilisation.

converting.h

converting.h

copy
12345
auto locked_shared = p_weak.lock(); if (locked_shared) // The object is alive, and you can use lockedSharedPtr to access it. else // The object has been deallocated, and lockedSharedPtr is empty.
Tâche

Swipe to start coding

Complétez le code suivant pour créer un std::weak_ptr à partir d'un std::shared_ptr, le convertir de nouveau en un std::shared_ptr, et accéder en toute sécurité à la valeur de l'objet géré.

Solution

solution.cpp

solution.cpp

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 2
single

single

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Suggested prompts:

Can you show an example of how to create a std::weak_ptr from a std::shared_ptr?

How do I check if a std::weak_ptr is still valid before using it?

What happens if I try to access an expired std::weak_ptr?

close

Awesome!

Completion rate improved to 5.56

bookCréation et Utilisation des Pointeurs Faibles

Glissez pour afficher le menu

Création de Weak Pointers

Vous devriez généralement créer un std::weak_ptr à partir d'un std::shared_ptr existant. Cela garantit que le weak pointer observe un objet déjà géré par au moins un shared pointer.

creating_weak_pointer.h

creating_weak_pointer.h

copy
12
std::shared_ptr<int> p_shared = std::make_shared<int>(42); std::weak_ptr<int> p_weak(sharedPtr);

Le std::weak_ptr p_weak est construit à partir d'un std::shared_ptr existant p_shared. Cela signifie que p_weak n'augmente pas le compteur de référence de p_shared mais observe plutôt le même objet géré. La validité de p_weak dépend de p_shared; si toutes les instances de std::shared_ptr gérant l'objet sont détruites, p_weak expire et ne peut plus être utilisé pour accéder directement à l'objet.

Utilisation des pointeurs faibles

Pour accéder à un objet géré par un std::weak_ptr, vous devez d'abord le convertir en un std::shared_ptr en utilisant lock(). Cette méthode vérifie si l'objet est toujours vivant et renvoie un std::shared_ptr vers celui-ci, sinon, elle renvoie un std::shared_ptr vide.

Verrouiller un pointeur faible empêche l'objet d'être détruit pendant son utilisation. Étant donné que std::weak_ptr ne contribue pas au compteur de références, accéder directement à l'objet risquerait d'utiliser une instance détruite. Le convertir en un std::shared_ptr augmente le compteur de références, garantissant que l'objet reste valide pendant son utilisation.

converting.h

converting.h

copy
12345
auto locked_shared = p_weak.lock(); if (locked_shared) // The object is alive, and you can use lockedSharedPtr to access it. else // The object has been deallocated, and lockedSharedPtr is empty.
Tâche

Swipe to start coding

Complétez le code suivant pour créer un std::weak_ptr à partir d'un std::shared_ptr, le convertir de nouveau en un std::shared_ptr, et accéder en toute sécurité à la valeur de l'objet géré.

Solution

solution.cpp

solution.cpp

Switch to desktopPassez à un bureau pour une pratique réelleContinuez d'où vous êtes en utilisant l'une des options ci-dessous
Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

close

Awesome!

Completion rate improved to 5.56
Section 4. Chapitre 2
single

single

some-alt