C ++ std unique_ptr

C ++ std unique_ptr
Un pointeur unique est un pointeur intelligent. Pour discuter de ce qu'est un pointeur unique, nous devons comprendre ce que sont les pointeurs intelligents. Le processus d'ajout et de suppression des articles peut être automatisé avec des pointeurs intelligents. Les pointeurs intelligents signifient que lorsque vous appelez maintenant, vous n'avez pas à appeler la suppression et dans de nombreux cas avec des pointeurs intelligents, nous n'avons même pas à appeler de nouvelles. Les pointeurs intelligents sont les meilleurs de cette façon pour que tout cela se produise.

Chaque fois que le pointeur intelligent est créé, il appellera automatiquement nouveau et allouera le tas de mémoire. Ensuite, en fonction de quel pointeur intelligent que vous utilisez, cette mémoire deviendra automatiquement libre. Passons maintenant à notre sujet principal, le pointeur unique. Un pointeur unique sera éliminé lorsqu'il sortira de la portée. Les pointeurs uniques ne peuvent pas être copiés sur l'autre pointeur s'il est du même type de données car un pointeur unique pointe vers une mémoire. Si le pointeur unique a été copié, cela signifie qu'à un moment, deux pointeurs pointent vers le même tas de mémoire. C'est donc pourquoi nous ne pouvons pas copier des pointeurs uniques. Des pointeurs uniques s'assurent qu'ils suppriment leurs objets avec eux.

Syntaxe

La syntaxe pour créer un pointeur unique est la suivante:

std :: unique_ptr p (nouveau int);

Ici, l'objet créé dynamiquement est également détruit lorsque le pointeur unique lui-même est détruit.

Exemple # 01:

Pour comprendre plus en profondeur des pointeurs, nous donnerons un exemple. Dans cet exemple, nous avons défini une structure nommée personne. «Person» a un constructeur qui prend une chaîne comme paramètre et imprime la valeur. Il a également un destructeur qui, lors de la destruction, imprimera «supprimé» afin que nous puissions comprendre que la personne est détruite. À l'intérieur de la méthode principale, nous avons déclaré un pointeur unique et l'avons passé une valeur «Jack.".

Maintenant, ce pointeur prendra «Jack» et le passera à la mémoire qu'il pointe qui est la structure «personne». La valeur «Jack» ira au constructeur et sera imprimé. Après cela, le pointeur unique supprimera automatiquement l'objet et «supprimé!»Sera imprimé sur l'écran. Maintenant, exécutons et exécutons notre code pour voir la sortie.

#inclure
#inclure
Utilisation de Namespace Std;
structure

Personne (chaîne n): nom (n)

couter<
~ Personne ()

couter<< "Deleted!";

nom de chaîne;
;
int
principal ()

auto p = make_unique ("jack");
retour 0;

Notre code a été exécuté avec succès et nous donne la sortie attendue. Le pointeur unique a pris la valeur «Jack» et l'a transmis au constructeur parce qu'il pointait vers l'objet de la structure «personne». Le constructeur a imprimé la valeur. Après cela, «supprimé» est imprimé. Maintenant, ici, nous avons seulement imprimé la valeur. Mais dans les scénarios en temps réel, nous pouvons effectuer toutes les opérations et une fois l'opération effectuée, l'objet de structure ou de classe sera lui-même détruit.

Exemple # 02:

Dans cet exemple, nous avons essayé d'expliquer le constructeur unique en détail. Nous avons également essayé de créer un pointeur unique différemment afin que vous puissiez comprendre les différentes syntaxes et approches pour créer des pointeurs uniques. Pour effectuer cet exemple, nous avons créé une classe nommée «Uniqueptr». Dans cette classe, nous avons un constructeur de cette classe et un destructeur. Dans l'exemple précédent, nous avons expliqué que nous pouvons faire l'opération que nous voulons dans le constructeur. Dans cet exemple, nous avons essayé de le faire pour vous offrir une expérience pratique.

Donc, dans le constructeur d'abord, nous avons imprimé «dans le constructeur» pour faire savoir à l'utilisateur que nous sommes dans notre constructeur pour le moment. Après cela, nous avons déclaré deux entiers «x» et «y» qui détiennent respectivement les valeurs de «2» et «3». Après cela, nous avons déclaré une autre variable qui est également un entier: «Z». Nous avons résumé ou ajouté les valeurs de «x» et «y» et stocké la sortie dans l'entier «z». En ligne numéro 13, nous avons imprimé «l'opération effectuée» et nous avons également imprimé la valeur de «z» contre lui afin que nous puissions faire savoir à l'utilisateur que l'opération est effectuée et la valeur après l'opération la suivante.

Dans notre destructeur, nous avons simplement imprimé «en destructeur». Dans la méthode principale, nous avons simplement créé le pointeur unique et l'avons passé le nom de classe afin qu'il puisse comprendre quelle mémoire il doit pointer vers. Maintenant, nous allons exécuter notre code pour vérifier la sortie.

#inclure
#inclure
Utilisation de Namespace Std;
classe Uniqueptr

public:
Uniqueptr ()

couter<<”In constructor”<int x = 2;
int y = 3;
int z = x + y;
couter<<”Operation Performed = “<
~ Uniqueptr ()

couter<<”In Destructor”<
;
int main ()

std :: unique_ptr x = std :: unique_ptr (new UniquePtr);
retour 0;

Une fois notre code exécuté, ce qui suit est la sortie que nous obtiendrons du système. Une chose à expliquer ici est que, dans notre méthode principale, nous n'avons créé aucun objet de la classe pour y accéder. Au lieu de cela, nous n'avons créé qu'un pointeur unique et l'avons pointé vers notre classe. Le système a imprimé «dans le constructeur», ce qui signifie qu'il est allé dans le constructeur et que l'autre ligne imprimée explique également que le système a effectué l'opération d'addition sur les entiers et imprimé la valeur contre le message imprimé. Enfin, le compilateur s'est déplacé à l'intérieur du destructeur, a imprimé le message et a détruit l'objet de la classe. Une chose à noter ici est que nous n'avons pas créé ou supprimé le tas de mémoire ici. Tout cela a été fait par notre pointeur unique.

Conclusion

Dans ce guide, nous avons discuté d'un type de pointeur intelligent qui est un pointeur unique. Les pointeurs uniques sont des pointeurs intelligents qui nous aident avec l'allocation de la mémoire et la gestion de la mémoire. Donc, pour comprendre les pointeurs uniques, nous avons d'abord expliqué les pointeurs intelligents et les pointeurs uniques théoriquement. Après cela, nous avons expliqué la syntaxe de pointeurs uniques. Plusieurs exemples ont été effectués dans différents scénarios pour faire en sorte que le lecteur comprenne pratiquement des pointeurs uniques.