Junior
Quels sont les pointeurs intelligents en C++?
sobes.tech IA
Réponse de l'IA
std::unique_ptr, std::shared_ptr, std::weak_ptr.
-
std::unique_ptr:- Propriété exclusive de l'objet.
- Ne peut pas être copié, mais peut être déplacé (
std::move). - Supprime automatiquement l'objet à la sortie du scope ou lors de la destruction de
unique_ptr. - Léger, sans coûts supplémentaires pour le compteur de références.
#include <memory> // Création de unique_ptr std::unique_ptr<int> up1(new int(10)); // Déplacement de propriété std::unique_ptr<int> up2 = std::move(up1); // up1 est maintenant nullptr // up2 possède l'objet -
std::shared_ptr:- Propriété partagée de l'objet.
- Utilise un compteur de références pour suivre combien de
shared_ptrpointent vers la ressource. - L'objet est supprimé lorsque le dernier
shared_ptrqui le référence est détruit. - Peut être copié et déplacé.
- A des coûts supplémentaires pour le compteur de références (généralement alloué séparément).
- Peut former des références cycliques, ce qui entraîne des fuites de mémoire.
#include <memory> // Création de shared_ptr std::shared_ptr<int> sp1 = std::make_shared<int>(20); // Copie de propriété std::shared_ptr<int> sp2 = sp1; // Le compteur de références augmente // sp1 et sp2 possèdent l'objet -
std::weak_ptr:- Ne possède pas l'objet.
- Représente une "référence faible" à l'objet, gérée par un ou plusieurs
shared_ptr. - Utilisé pour prévenir les références cycliques entre
shared_ptr. - N'augmente pas le compteur de références de l'objet.
- Pour accéder en toute sécurité à l'objet, il faut le convertir en
shared_ptravec la méthodelock(). Si l'objet a déjà été supprimé,lock()renverra unshared_ptrvide.
#include <memory> // Création de shared_ptr std::shared_ptr<int> sp = std::make_shared<int>(30); // Création de weak_ptr à partir de shared_ptr std::weak_ptr<int> wp = sp; // Vérification et utilisation de l'objet if (auto shared_from_weak = wp.lock()) { // Accès à l'objet via shared_from_weak } else { // L'objet a déjà été supprimé }