Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Qu'est-ce Que les Pointeurs Uniques ? | Pointeurs Uniques
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
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.

Tâche

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

cpp

solution

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 !

Section 2. Chapitre 1
toggle bottom row

book
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.

Tâche

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

cpp

solution

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 !

Section 2. Chapitre 1
Switch to desktopPassez à un bureau pour une pratique réelleContinuez d'où vous êtes en utilisant l'une des options ci-dessous
We're sorry to hear that something went wrong. What happened?
some-alt