Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Fonctionnement Interne d'un Pointeur Unique | 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
Fonctionnement Interne d'un Pointeur Unique

Lorsque vous créez un nouveau pointeur unique, il alloue de la mémoire pour la ressource sur le tas. Le tas est une partie de la mémoire du programme réservée à l'allocation dynamique de mémoire.

Lorsque le pointeur unique sort de la portée (par exemple, une fonction se termine ou un bloc se termine), le destructeur de la ressource pointée est appelé. Ce destructeur, à son tour, supprime la ressource et libère la mémoire associée. Ce processus se produit automatiquement, même en cas d'exceptions, rendant les pointeurs uniques exceptionnellement sûrs et fiables.

Fonctions de pointeur unique à retenir

En plus des fonctions que nous avons discutées dans les sections précédentes, voici quelques autres fonctions essentielles de pointeur unique dont vous devriez être conscient :

reset

Cette fonction peut être utilisée pour faire pointer un pointeur unique vers une nouvelle ressource ou pour libérer la ressource actuelle sans la détruire.

Dans la ligne de code ci-dessus, nous appelons reset() sans paramètre, ce qui définit le pointeur unique à null, et supprime la ressource associée.

Ici, nous passons un argument à la fonction reset(). Ce code remplacera l'ancien objet pointé par un nouvel objet.

release

La fonction release est utilisée pour libérer la propriété de la ressource du pointeur unique, sans détruire la ressource.

Dans le code ci-dessus, nous utilisons l'appel release() pour prendre la propriété de l'objet de ptr et la transférer à ptr2. Après l'exécution de cette ligne, ptr sera null.

Il est important de noter que release() n'appelle pas le destructeur pour la ressource pointée. Considérez le code suivant :

cpp

releaseBadExample

copy
12
std::unique_ptr<int> intPtr = std::make_unique<int>(42); intPtr.release(); //memory leak introduced here, dont do this.

Remarque

Le code ci-dessus entraînera une fuite de mémoire, car nous avons appelé release() mais n'avons pas assigné la valeur retournée à une variable.

operator* et operator->

Ces opérateurs vous permettent d'accéder à la ressource comme si vous travailliez directement avec elle. Ils fournissent une manière naturelle et intuitive d'interagir avec l'objet géré.

Que fait la fonction reset() lorsqu'elle est appelée sans paramètre ?

Que fait la fonction reset() lorsqu'elle est appelée sans paramètre ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 5
We're sorry to hear that something went wrong. What happened?
some-alt