Le 14 septembre 2017, nous avons publié une version actualisée de notre Politique de confidentialité. En utilisant video2brain.com vous vous engagez à respecter ces documents mis à jour. Veuillez donc prendre quelques minutes pour les consulter.

C++ : Les pointeurs intelligents

Personnaliser la destruction

TESTEZ LINKEDIN LEARNING GRATUITEMENT ET SANS ENGAGEMENT

Tester maintenant Afficher tous les abonnements
Avec l'utilisation des pointeurs intelligents, apparaît le besoin de gérer spécifiquement la libération des ressources. Apprenez à écrire des fonctions de désallocation personnalisées telles que deleter.

Transcription

Lorsque l'on utilise les pointeurs intelligents, on peut avoir besoin pour certaines ressources de spécifier des opérations précises à faire lorsque l'objet et la ressource est libérée. À ce moment là, lorsque l'on définit le pointeur intelligent ici un pointeur partagé a, on spécifie non seulement l'objet et la ressource qui doit être gérée, mais on spécifie aussi une fonction de désallocation ici Désallocation spécifique. Cette fonction ici reçoit un pointeur de type c qu'elle va devoir désallouer, moi je n'y ai mis qu'un log, mais elle peut y ajouter d'autres opérations qui sont vraiment relatives à l'objet manipulé. Ça peut être une base de donnée à fermer, un fichier à fermer, des ressources qui ne seront pas mémoire mais qui doivent être pour autant libérées Ici donc, j'affiche le contenu de mon pointeur. Si on exécute ici on a bien l'appel au constructeur en passant Contenu l'affichage avec log_PTR ici du contenu, et puis lorsque je réinitialise avec un reset mon pointeur partagé, il ne référence plus Contenu donc le destructeur est appelé mais non seulement le destructeur est appelé mais avant, j'ai Désallocation et Opérations spécifiques qui est loggé puisque c'est Désallocation spécifique qui effectue cette désallocation. Donc on a une gestion beaucoup plus fine. Et donc après lorsque j'affiche avec log_PTR bien sûr il n'y a plus rien dans a, a ne référence aucune ressource puisqu'elle a été détruite au moment du reset. Autrement que par une fonction, je peux définir par un foncteur ma fonction de désallocation spécifique donc je reprends le code de cette fonction, et je fais une classe donc le concept de foncteur a été proposé par l'ISTL, et c'est une classe qui a une particularité, alors ici je vais l'appeler D, comme Deleter, et puis je vais mettre en public l'opération de désallocation qui sera en fait une surcharge de l'opérateur parenthèse. Cet opérateur parenthèse prend en paramètres la chaine a désallouer. Donc const chaine * chaine_a_desallouer. Et je reprends le code ici alors bien sûr sans prototype que j'ai déjà écrit. J'indente mon code. Et donc je fais exactement la même opération, sauf que là je passe par un foncteur alors bien sûr, il faut que je change le paramètre que je passe à la création de mon shared pointer pour lui dire que c'est non plus une fonction qu'il faut qu'il utilise pour détruire la chaine, mais un foncteur. Donc ici lorsque je lance mon opération j'ai toujours l'appel à mon log Désallocation spécifique sauf que c'est celui de mon foncteur maintenant qui est appelé. Alors il y a une troisième option possible pour la désallocation spécifique, si on a une opération très rapide à faire c'est d'utiliser une expression lambda une lambda expression, qui va elle reprendre exactement la même syntaxe. Alors je vais faire quelque chose de plus basique parce que c'est une lambda expression. Je vais quand même reprendre mon paramètre ici et le coller ici. Et puis effectuer une opération plus basique puisque je vais reprendre chaine_a_desallouer et paramètres. Et donc dernière façon de faire c'est d'utiliser une lambda expression qui n'augmente pas forcément la lisibilité de votre programme. Je n'ai pas mis de log dans ma lambda expression mais on a ici un troisième moyen de définir une destruction lorsque la ressource est libérée. Alors, la plupart du temps, le destructeur par défaut convient très bien à la libération de la ressource. C'est vraiment dans vos programmes quand vous aurez des besoins bien définis bien spécifiques liés à des ressources particulières que vous pourrez utiliser cette méthode.

C++ : Les pointeurs intelligents

Utilisez les pointeurs intelligents et gérez efficacement vos ressources et allocations de mémoire en C++. Choisissez le type de pointeur intelligent en fonction de vos besoins.

29 min (9 vidéos)
Aucun commentaire n´est disponible actuellement
 
Logiciel :
Spécial abonnés
Date de parution :24 oct. 2016

Votre formation est disponible en ligne avec option de téléchargement. Bonne nouvelle : vous ne devez pas choisir entre les deux. Dès que vous achetez une formation, vous disposez des deux options de consultation !

Le téléchargement vous permet de consulter la formation hors ligne et offre une interface plus conviviale. Si vous travaillez sur différents ordinateurs ou que vous ne voulez pas regarder la formation en une seule fois, connectez-vous sur cette page pour consulter en ligne les vidéos de la formation. Nous vous souhaitons un excellent apprentissage avec cette formation vidéo.

N'hésitez pas à nous contacter si vous avez des questions !