C ++ activé_shared_from_this

C ++ activé_shared_from_this
Le pointeur intelligent nous permet de récupérer le pointeur partagé de ce pointeur dans une fonction membre. Pour ce faire, la classe Activer_Shared_From_Ce est utilisée. C'est une classe de base qui permet au codeur de permettre à l'objet de générer les instances supplémentaires pour le pointeur partagé, ou nous pouvons dire qu'il permet le partage de propriété des pointeurs partagés. Un Alived_shared_from_Ca est une technique courante qui permet à un objet PTR partagé géré d'obtenir un PTR partagé seul chaque fois que cela est nécessaire. Il est très probablement utilisé lorsque nous appelons une fonction à partir d'une fonction membre. Nous passons «ceci» comme argument à cette fonction.

Passer cela alors qu'un pointeur brut enfreint la restriction en passant les pointeurs bruts et partagés vers le même bloc de mémoire, ce qui rend le pointeur partagé inutile. Il existe également une autre méthode pour effectuer les mêmes fonctionnalités que celles fournies par la classe Activer_shared_from_. Mais cette méthode implique le casting dynamique.

Il fournit les fonctions membres suivantes:

Constructeur nous permet de construire un objet.

Destructeur Permettez-nous de détruire l'objet.

Opérateur «=»nous permet de retourner la référence à «ce» pointeur.

Shared_from_this est utilisé pour retourner le pointeur partagé qui partage la propriété du pointeur «* ce».

Faible_from_this Renvoie la propriété du pointeur faible qui partage la propriété avec le pointeur «* ce».

Syntaxe:

modèle Class active_shared_from_this;

La syntaxe précédemment affichée est la syntaxe de la classe de base en activer_shared_from_. T désigne le type de classe qui doit être défini dans cette syntaxe.

Exemple 1:

Maintenant, nous essayons un exemple pour la classe de base enable_shared_from_. Incluons d'abord nos fichiers d'en-tête. Le premier est la «mémoire». Le second est le «iostream». La mémoire est utilisée pour permettre au codeur d'effectuer les différentes opérations qui sont comme l'allocation du tas de mémoire. Le second est «iostream» où il est utilisé pour permettre aux opérations d'entrée-sortie qui sont effectuées dans le code pour afficher les données souhaitées pour afficher. Maintenant, en utilisant la structure, nous définissons un objet nommé «shrd_class». Nous déclarons notre classe de base «activer_shared_from_this» auquel nous passons le «shrd_class». Cela signifie que l'objet est une classe de base de active_shared_from_this.

La structure est le moyen de regrouper les différentes variables connexes en un seul endroit. Dans notre cas, nous rassemblons les variables du pointeur dans une classe qui est «OBJ». À l'intérieur de l'objet, nous appelons d'abord un constructeur ou l'objet «shrd_class». Ensuite, nous déclarons une fonction get_class () du pointeur partagé du type "shrd_class" qui affiche le message "Propriété partagée" lorsque la fonction "get_class" est appelée et renvoie la classe Shared_from_Te généra les instances du pointeur partagé.

Maintenant, nous nous dirigeons vers notre fonction principale dans laquelle nous déclarons un pointeur partagé de l'objet de type "shrd_class" dans lequel nous nommons "PF1". Nous allouons le pointeur «shrd_class» en utilisant le nouveau mot clé dans le tas de mémoire. Ensuite, nous déclarons une variable «PF2» du type automatique auquel nous attribuons le «get_class ()» en utilisant le pointeur partagé «PF1». L'opérateur «->» que nous utilisons dans cette ligne signifie que nous accédons à la fonction membre de tout objet, qu'il s'agisse d'une union, d'une structure, etc. Utilisation du pointeur. Dans cet exemple, nous accédons à la méthode get_class () de la classe de structure «OBJ» à l'aide du pointeur «PF1».

#inclure
#inclure
struct shrd_class: public std :: enable_shared_from_this
shrd_class ()
std :: shared_ptrget_class ()
std :: cout<< "ownership shared" << std::endl;
return shared_from_this ();

;
int main()
std :: shared_ptr pf1 (new shrd_class);
auto pf2 = pf1-> get_class ();

Maintenant, dans l'attente de notre sortie, nous avons affiché avec succès le message, ce qui signifie que le «PF1» est l'instance de l'objet «shrd_class» et partage la propriété. Nous pouvons le voir dans la capture d'écran qui est affichée dans ce qui suit:

Exemple 2:

Perdons un autre exemple dans lequel nous créons deux pointeurs partagés qui partagent leur propriété. Maintenant, passons à notre code affiché suivant. Nous déclarons d'abord les fichiers d'en-tête «iOStream» et le fichier d'en-tête «mémoire». Après cela, nous déclarons une classe de base enable_shared_from_. Maintenant, nous passons à notre fonction principale où nous effectuons le partage de l'objet entre deux pointeurs partagés différents. À l'intérieur de la fonction principale, nous déclarons un pointeur partagé nommé «shrd_ptr_1» et le deuxième «shrd_ptr_2» de type «obj». Dans la ligne suivante au pointeur "shrd_ptr_1", nous attribuons la méthode "make_shared () qui est utilisée pour allouer un objet de type" obj "et renvoyer l'objet partagé_ptr.

Ensuite, nous attribuons notre deuxième méthode de pointeur partagé_from_this () qui nous permet de retourner le pointeur qui partage la propriété du pointeur «* ce». En cela, le "SHRD_PTR_1" partage sa propriété avec le "SHRD_PTR_2". Après cela, nous utilisons la déclaration if () dans laquelle nous passons deux conditions. Le premier «shrd_ptr_1.propriétaire_before (shrd_ptr_2) ”dans ce propriétaire_before est la fonction membre qui renvoie la valeur booléenne True ou Faux si ce pointeur partagé est ordonné avant le pointeur passé.

Dans notre cas, il vérifie si le "SHRD" PTR_1 "est ordonné avant le" SHRD_PTR_2 "ou non. La deuxième condition est vice versa. Dans ce document, nous vérifions si le "SHRD_PTR_2" est inférieur ou ordonné avant le "SHRD_PTR_1". Si ces deux conditions ne se produisent pas, elle se déplace à l'intérieur de l'instruction if () et affiche le message «SHRD_PTR_1 et« SHRD_PTR_2 »et partage la propriété. En fin de compte, nous retournons la valeur nul, ce qui signifie que le code s'exécute avec succès sans aucune erreur.

#inclure
#inclure
struct obj: std :: enable_shared_from_this ;
int main ()
std :: shared_ptr shrd_ptr_1, shrd_ptr_2;
shrd_ptr_1 = std :: make_shared ();
shrd_ptr_2 = shrd_ptr_1-> shared_from_this ();
si (!shrd_ptr_1.propriétaire_before (shrd_ptr_2) && !shrd_ptr_2.propriétaire_before (shrd_ptr_1))
std :: cout<< "shrd_ptr_1 and shrd_ptr_2 share ownership";
retour 0;

Comme nous pouvons le voir dans la sortie du code donné, il affiche le message avec succès. Cela signifie que la propriété entre les deux pointeurs partagés "SHRD_PTR_1" et le "SHRD_PTR_2" sont partagés avec succès en utilisant la classe de base ACTIVE_SHARED_FROM_CE et ses fonctions membres.

Conclusion

Dans ce didacticiel, nous avons décrit les méthodes sur la façon d'utiliser la classe Activer_shared_from_is. Nous avons fait de notre mieux pour expliquer la classe Activer_shared_from_. Nous espérons que cet article vous sera utile pour que vous obteniez une meilleure compréhension.