Pointeur intelligent en C ++

Pointeur intelligent en C ++
Le pointeur intelligent est un concept très important introduit en C++. Le pointeur intelligent est utilisé en C ++ pour résoudre le problème de l'utilisation du pointeur normal. Pour supprimer les inconvénients du pointeur normal, le pointeur intelligent existe dans le C++.

Pointeur intelligent vs pointeur ordinaire

Les deux principaux problèmes de l'utilisation de pointeurs réguliers sont:

un. Le pointeur régulier ne peut pas gérer efficacement l'utilisation de la mémoire.

b. Il ne peut pas libérer l'objet mémoire lorsqu'ils ne sont pas utilisés dans le programme.

c. Comme le pointeur normal ne peut pas allouer la mémoire de l'objet, si le pointeur est supprimé du programme, l'adresse de l'objet mémoire qui est signalé par le pointeur n'est pas trouvée. Par conséquent, fuite de mémoire arrive.

Pour cela, nous utilisons le pointeur intelligent sur le pointeur ordinaire. Les avantages des pointeurs intelligents sur les pointeurs réguliers sont:

un. Il gère automatiquement la mémoire.

b. Il a publié la mémoire de l'objet lorsqu'ils ne sont pas utilisés dans le programme.

c. Il alloue la mémoire de l'objet lorsque le pointeur sort de la portée du programme.

d. Le pointeur intelligent est utilisé en C ++ pour allouer les objets, traversant les différents types de structure de données et gère différents types d'expression de lambda pour passer à l'intérieur de la fonction.

e. Cela rend notre programme très sécurisé et sûr. En conséquence, le programme se transforme pour être très simple à comprendre et à devenir plus facile à déboguer.

Différents types de pointeurs intelligents

Normalement, il existe trois types de pointeurs intelligents disponibles en C++. Ils sont:

un. Unique

b. partagé

c. Faible.

Nous discuterons de chacun d'eux ci-dessous.

un. Pointeur unique

un. Le pointeur unique tient un pointeur vers un objet. Il libère la mémoire de l'objet lorsqu'il sort de la portée.

b. L'une des caractéristiques uniques du pointeur unique est qu'il n'y a qu'une seule copie d'un objet présent dans la mémoire. Aucune autre ressource ne peut pointer vers cet objet particulier.

c. Si de nombreuses ressources sont disponibles pour un objet dans le code, il se produit une erreur de temps de compilation.

Exemple de programmation 1:

#inclure
#inclure
Utilisation de Namespace Std;
Classe Square
côté int;
public :
Carré (int s)

côté = s;

Int Area ()

retour (côté * côté);

;
int main()

unique_ptr p1 (nouveau carré (2));
couter< area () <retour 0;

Sortir:

Explication:

Ici, nous avons créé une classe nommée Square. À l'intérieur de la classe, un côté variable est déclaré et appelle le constructeur pour initialiser la valeur de la variable latérale. Maintenant, nous avons défini une fonction nommée zone qui renvoie sa valeur de zone.

À l'intérieur de la fonction Main (), nous avons déclaré un pointeur unique nommé unique_ptr. Maintenant, nous avons créé un pointeur P1 qui pointe l'objet du carré de classe et à l'intérieur de ses parenthèses, nous passons une valeur 2.

Maintenant, si nous imprimons la zone à travers le pointeur P1 comme P1-> zone (), il montre que la zone du carré est 4.

b. Pointeur partagé

un. Le pointeur partagé peut être appliqué dans le programme lorsque nous voulons attribuer un pointeur à plusieurs ressources d'objet.

b. Le pointeur partagé est une adresse générée en comptant le pointeur intelligent, qui peut être utilisé pour stocker et passer une référence au-delà de la portée d'une fonction.

c. Il est très utile dans la POO (programme orienté objet). Pour stocker un pointeur en tant que variable de membre, le pointeur partagé est utilisé.

d. Le pointeur partagé ne sera pas supprimé tant que toutes les ressources n'auront terminé leur tâche.

Exemple de programmation 2:

#inclure
#inclure
Utilisation de Namespace Std;
Classe Square
côté int;
public :
Carré (int s)

côté = s;

Int Area ()

retour (côté * côté);

;
int main()

shared_ptrp1 (nouveau carré (2));
// Présentation du pointeur partagé;
shared_ptrp2;
P2 = p1;
coutercouterretour 0;

Sortir:

Explication:

Cet exemple de programmation 2 est la continuation de l'exemple de programmation 1. À l'intérieur de la fonction Main (), nous avons introduit le pointeur partagé. En utilisant le pointeur P1, nous avons créé l'objet de la classe carrée. Le même objet est pointé par la valeur P2-> Area () et P1-> Area (). Les deux montrent que la zone de la place est 4.

c. Pointeur faible

un. Le pointeur faible est un cas particulier de pointeur à utiliser avec les pointeurs partagés.

b. Le pointeur faible a une installation pour accéder à un objet qui appartient à une ou plusieurs instances de pointeur partagé.

c. Ce n'est pas une partie du comptage de référence.

d. Nous utilisons le pointeur faible dans le programme lorsque nous voulons observer un objet, mais nous ne devons pas qu'il reste en vie.

Exemple de programmation 3:

#inclure
#inclure
Utilisation de Namespace Std;
Classe Square
côté int;
public :
Carré (int s)

côté = s;

Int Area ()

retour (côté * côté);

;
int main()

shared_ptrp1 (nouveau carré (2));
faible_ptrw1;
faible_ptr w2 (w1);
faible_ptr w3 (p1);
couter<< "w1:" << w1.use_count()<couter<< "w2:" << w2.use_count()<couter<< "w3:" << w3.use_count()<retour 0;

Sortir:

Explication:

Cet exemple de programmation 3 est la continuation de l'exemple de programmation 2. Ici, nous avons introduit un pointeur partagé nommé Shared_ptr et créé un pointeur P1 pour pointer l'objet de la classe carrée. Maintenant, nous avons utilisé le pointeur faible, faible_ptr qui pointe W1 et W2. À l'intérieur du W2, nous passons W1. Nous avons créé un autre pointeur faible W3 où nous passons le pointeur P1.

Maintenant, si nous imprimons tout le W1.use_count () et w2.use_count (), le résultat s'affichera.

Conclusion

En discutant en détail du concept et des utilisations du pointeur intelligent, nous sommes arrivés à cette conclusion que le pointeur intelligent est introduit en C ++ pour supprimer les inconvénients du pointeur normal. Grâce au pointeur intelligent, nous pouvons gérer très efficacement les différents types de propriétaires et les ressources de l'objet. Nous espérons que cet article est utile. Découvrez d'autres articles sur les conseils pour plus de conseils et de tutoriels.