Junior — Middle
Quelles sont les différences entre un pointeur non enveloppant standard et un pointeur intelligent std::unique_ptr en C++?
sobes.tech IA
Réponse de l'IA
Les principales différences entre un pointeur brut standard (raw pointer) et un pointeur intelligent std::unique_ptr en C++:
-
Gestion de la durée de vie de l'objet :
- Le pointeur brut stocke simplement l'adresse, mais ne gère pas la durée de vie de l'objet. Il faut appeler manuellement delete.
- std::unique_ptr supprime automatiquement l'objet à la sortie du scope, évitant ainsi les fuites de mémoire.
-
Propriété :
- Le pointeur brut ne possède pas l'objet, il peut être copié et transféré librement.
- std::unique_ptr possède l'objet de manière exclusive, la copie est interdite, seul le déplacement est autorisé.
-
Sécurité :
- Le pointeur brut peut conduire à des erreurs si l'on oublie de supprimer l'objet ou si l'on l'utilise après sa suppression.
- std::unique_ptr aide à éviter ces erreurs grâce à sa gestion automatique.
Exemple d'utilisation de std::unique_ptr :
#include <memory>
std::unique_ptr<int> ptr = std::make_unique<int>(42);
// ptr supprimera automatiquement l'objet à la sortie du scope
Ainsi, std::unique_ptr facilite la gestion de la mémoire dynamique et augmente la sécurité du code.