Utilisation de C++ unique_ptr

Use C Unique_ptr



Les pointeurs intelligents sont utilisés pour allouer la ressource de manière dynamique. De nombreux types de pointeurs intelligents sont utilisés en C++ à diverses fins, telles que auto_ptr , unique_ptr , et partagé_ptr . Le pointeur auto_ptr est obsolète dans la nouvelle version de C++. Le unique_ptr est utilisé en remplacement de l'auto_ptr. L'objet de ce pointeur peut s'approprier le pointeur. L'objet de ce pointeur possède le pointeur de manière unique et aucun autre pointeur ne peut pointer vers l'objet. Le unique_ptr supprime les objets automatiquement. Ce pointeur gère ces objets si les objets sont détruits, ou si la valeur de l'objet est modifiée ou si la fonction reset() est appelée. Les fonctionnalités de unique_ptr et les utilisations de ce pointeur sont abordées dans ce didacticiel.

Composants majeurs:







Deux composants principaux de l'objet unique_ptr sont fournis ci-dessous :



A. Pointeur stocké :



Il permet de gérer les objets créés par un pointeur unique. Il est créé au moment de la création du pointeur et peut être modifié de différentes manières.





B. Supprimeur stocké :

Il prend l'argument du type de pointeur stocké qui est utilisé pour supprimer l'objet géré. Il est également créé au moment de la création du pointeur et peut être modifié de différentes manières.



Exemple 1 : créer un objet pointeur d'une classe avec constructeur

La façon de déclarer les objets pointeurs uniques d'une classe et d'accéder à la méthode de la classe consiste à utiliser les objets comme illustré dans l'exemple suivant. Une classe avec un constructeur et une méthode publique a été déclarée dans le code. Le constructeur a trois arguments. Le premier pointeur unique a été créé en appelant le constructeur avec trois valeurs d'argument. Les Résultat() La méthode est appelée par l'objet pointeur qui calcule la somme des trois valeurs d'argument du constructeur. Ensuite, le deuxième objet pointeur unique est créé sans appeler le constructeur et le premier pointeur est déplacé vers le deuxième pointeur. Les Résultat() La méthode est appelée par le deuxième objet pointeur.

//Inclure les bibliothèques nécessaires

#comprendre

#comprendre

utilisation de l'espace de noms std ;

//Définir la classe
Ajout de classe{

entier numéro1, numéro2, numéro3 ;
Publique:
//Déclarer le constructeur
Une addition(int a, int b, int c)
{
nombre1 = un;
nombre2 = b;
nombre3 = c;
}
//Déclarer la méthode pour calculer lesomme
int Résultat()
{
revenirnombre1 + nombre2 + nombre3 ;
}
};
int main()
{
//Déclarer le premier pointeur
pointeur unique_ptr1(nouvel ajout(Quatre cinq,55,30));

cout<<'Le résultat de la somme utilisant le premier pointeur :'<Résultat() <<' ';
//Déclarer le deuxième pointeur
pointeur unique_ptr2;
//Déplacer le premier pointeur vers le deuxième pointeur
pointeur2 = déplacer(pointeur1);

cout<<'Le résultat de la somme en utilisant le deuxième pointeur :'<Résultat() <<' ';
return0;
}

Sortir:

La sortie suivante apparaîtra après l'exécution du code ci-dessus. La somme de 45, 55 et 30 est 130 qui a été imprimée pour les deux pointeurs.

Exemple 2 : créer un objet pointeur d'une classe avec un constructeur et un destructeur

La façon de déclarer un objet pointeur unique d'une classe avec un constructeur et un destructeur a été montrée dans l'exemple suivant. La classe contient un constructeur avec un argument, une méthode publique nommée Display() à la valeur de la variable de classe et un destructeur qui imprimera un message de destruction avant de détruire l'objet de la classe. La méthode Display() est appelée après la création de l'objet pointeur unique dans le code.

//Inclure les bibliothèques nécessaires

#comprendre

#comprendre

utilisation de l'espace de noms std ;

//Définir la classe
classe Client
{
nom de chaîne ;

Publique:
//Déclarer le constructeur
Client(chaîne m)
{
nom = n;
cout<<'La ressource est allouée. ';
}

//Méthode de déclaration pour imprimer le nom du client
Affichage vide()
{
cout<<« Le nom du client est : »<<Nom<<' ';
}

//Déclarer le destructeur
~ Client()
{
cout<<« La ressource est détruite. ';
}
};
int main()
{
//Allouer l'objet Resource qui appartient à unique_ptr
unique_ptruPointer{nouveau client('Mir Abbas') };
uPointeur->Affichage();
return0;
}

Sortir:

La sortie suivante apparaîtra après l'exécution du code ci-dessus :

Exemple 3 : vérifier le pointeur après le transfert de propriété

La façon de vérifier la propriété du pointeur unique a montré dans l'exemple suivant en créant deux pointeurs uniques d'une classe. Une classe avec deux variables de chaîne et une méthode publique a été déclarée dans le code. La méthode Book_details() de la classe est appelée après avoir créé le premier objet pointeur unique de la classe. Ensuite, le deuxième objet pointeur unique a été créé et le premier pointeur a été déplacé vers le deuxième pointeur qui détruit le premier pointeur. La propriété des deux pointeurs doit être vérifiée ultérieurement.

//Inclure les bibliothèques nécessaires

#comprendre

#comprendre

utilisation de l'espace de noms std ;

//Définir la classe
livre de classe{

titre de la chaîne =« Le langage de programmation C++ »;
auteur de la chaîne ='Bjarne Stroustrup';

Publique:
//Déclarer la méthode pour imprimer les détails du livre
voidBook_details()
{
cout<<« Nom du livre : »<<Titre<<' ';
cout<<'Nom de l'auteur: '<<auteur<<' ';
}
};
int main()
{
//Déclarer le premier pointeur
pointeur unique_ptr1(nouveau livre());

pointeur1->Book_details();
//Déclarer le deuxième pointeur
pointeur unique_ptr2;
//Déplacer le premier pointeur vers le deuxième pointeur
pointeur2 = déplacer(pointeur1);

//Vérifiez le premier pointeur
si (static_cast(pointeur1))cout<<'Le premier pointeur n'est pas nul ';
elsecout<<'Le premier pointeur est nul ';
//Vérifiez le deuxième pointeur
si (static_cast(pointeur2))cout<<'Le deuxième pointeur n'est pas nul ';
elsecout<<'Le deuxième pointeur est nul ';

return0;
}

Sortir:

La sortie suivante apparaîtra après l'exécution du code ci-dessus. Selon la sortie, la propriété du premier pointeur a été supprimée et le message, Le premier pointeur est nul a imprimé pour le premier pointeur. La propriété du deuxième pointeur existe, et le message, Le premier pointeur n'est pas nul a imprimé pour le deuxième pointeur :

Conclusion:

Les objectifs de l'utilisation d'un pointeur unique dans la programmation C++ ont été décrits dans ce didacticiel à l'aide de plusieurs exemples. Les moyens de créer un pointeur unique, de transférer la propriété du pointeur et de vérifier la propriété actuelle du pointeur ont été expliqués ici pour aider les lecteurs à connaître correctement l'utilisation du pointeur unique.