Contenu du cours
Pointeurs Intelligents C++
Pointeurs Intelligents C++
Qu'est-ce Que les Pointeurs Uniques ?
Les pointeurs uniques sont sans doute les plus simples des pointeurs intelligents en C++. Comme le nom l'indique, un pointeur unique, défini comme std::unique_ptr
, permet à la ressource allouée (l'objet pointé) d'avoir seulement un seul propriétaire.
Cela signifie que les pointeurs uniques n'ont pas besoin d'effectuer de comptage de références, qui suit le nombre de pointeurs partageant la propriété d'une ressource.
Imposer cette relation un-à-un conduit à une surcharge mémoire moindre, améliorant ainsi les performances globales des applications C++.
Copie non autorisée
Un pointeur unique contient un pointeur brut vers la ressource/objet alloué. Il n'est pas possible de copier un pointeur unique, ou de le passer par valeur à une fonction.
Déplacement d'un pointeur unique
Cependant, vous pouvez transférer la propriété de l'objet pointé par un std::unique_ptr, en utilisant la fonction std::move.
Lorsque vous utilisez std::move
, cela "déplace" essentiellement la propriété de l'objet de uniquePtr1
à uniquePtr2
. Cela signifie qu'après cette ligne de code, uniquePtr1
ne possédera plus l'objet, et uniquePtr2
sera le nouveau propriétaire.
Plus de choses à savoir
Lorsqu'un pointeur unique sort de la portée (par exemple, une fonction se termine), ou est explicitement réinitialisé, la mémoire allouée est automatiquement libérée.
Bien qu'il ne soit pas possible de passer un pointeur unique à une classe externe, vous pouvez extraire et passer le pointeur brut en utilisant la méthode get()
.
Remarque
Cette approche est généralement déconseillée, car elle transfère la responsabilité de la gestion de la mémoire à la classe externe. Une meilleure alternative, dans la plupart des cas, est soit d'utiliser un pointeur partagé, soit de considérer le transfert de propriété du pointeur unique.
Swipe to start coding
- Complétez le code suivant de manière à ce que la propriété de l'entier alloué dynamiquement (avec la valeur 42) soit transférée en toute sécurité de
ptr1
àptr2
.
Solution
solution
Merci pour vos commentaires !
Qu'est-ce Que les Pointeurs Uniques ?
Les pointeurs uniques sont sans doute les plus simples des pointeurs intelligents en C++. Comme le nom l'indique, un pointeur unique, défini comme std::unique_ptr
, permet à la ressource allouée (l'objet pointé) d'avoir seulement un seul propriétaire.
Cela signifie que les pointeurs uniques n'ont pas besoin d'effectuer de comptage de références, qui suit le nombre de pointeurs partageant la propriété d'une ressource.
Imposer cette relation un-à-un conduit à une surcharge mémoire moindre, améliorant ainsi les performances globales des applications C++.
Copie non autorisée
Un pointeur unique contient un pointeur brut vers la ressource/objet alloué. Il n'est pas possible de copier un pointeur unique, ou de le passer par valeur à une fonction.
Déplacement d'un pointeur unique
Cependant, vous pouvez transférer la propriété de l'objet pointé par un std::unique_ptr, en utilisant la fonction std::move.
Lorsque vous utilisez std::move
, cela "déplace" essentiellement la propriété de l'objet de uniquePtr1
à uniquePtr2
. Cela signifie qu'après cette ligne de code, uniquePtr1
ne possédera plus l'objet, et uniquePtr2
sera le nouveau propriétaire.
Plus de choses à savoir
Lorsqu'un pointeur unique sort de la portée (par exemple, une fonction se termine), ou est explicitement réinitialisé, la mémoire allouée est automatiquement libérée.
Bien qu'il ne soit pas possible de passer un pointeur unique à une classe externe, vous pouvez extraire et passer le pointeur brut en utilisant la méthode get()
.
Remarque
Cette approche est généralement déconseillée, car elle transfère la responsabilité de la gestion de la mémoire à la classe externe. Une meilleure alternative, dans la plupart des cas, est soit d'utiliser un pointeur partagé, soit de considérer le transfert de propriété du pointeur unique.
Swipe to start coding
- Complétez le code suivant de manière à ce que la propriété de l'entier alloué dynamiquement (avec la valeur 42) soit transférée en toute sécurité de
ptr1
àptr2
.
Solution
solution
Merci pour vos commentaires !