Cours/Tuto C++ #45 : Les Pointeurs intelligents (Smart Pointers)

แชร์
ฝัง
  • เผยแพร่เมื่อ 24 ม.ค. 2025
  • Vous pensiez en avoir fini avec les pointeurs en C++ ? Alors d'une certaine manière, oui, mais les pointeurs intelligents vous permettent de faciliter votre gestion de la mémoire. Ici, j'introduis la notions de pointeur intelligent, et plus particulièrement de pointeurs uniques (unique pointer), partagés (shared pointer), et faibles (weak pointer).
    N'hésite pas à t'abonner si ce n'est pas fait pour être notifié à chaque fois que je sors du contenu !
    Accueil de la chaîne :
    / @revaninio
    Page Facebook :
    / revaniniocomputing
    Serveur Discord :
    / discord
    Crédits :
    Musique : Lakey Inspired - Better days
    Merci à tous de votre présence :D
    #informatique #cpp #cplusplus #programmation #coding #objectorientedprogramming #objectoriented #pointers #smartpointers #unique_ptr #shared_ptr #weak_ptr #visualstudio2022 #visualstudio #bjarnestroustrup

ความคิดเห็น • 12

  • @LeCodeurNul6418
    @LeCodeurNul6418 ปีที่แล้ว +2

    Continue,j'aime ton contenu

    • @revaninio
      @revaninio  ปีที่แล้ว

      Merci beaucoup ! :D

  • @felixshfail1
    @felixshfail1 ปีที่แล้ว +1

    Très intéressant, je fais présentement de la POO

    • @revaninio
      @revaninio  ปีที่แล้ว

      Merci pour le commentaire ! Bonne continuation dans votre apprentissage ! Si vous avez la moindre question, n'hésitez pas.

  • @anunnaki_nephilim
    @anunnaki_nephilim 6 หลายเดือนก่อน

    👍

  • @_DemoniaK_3D
    @_DemoniaK_3D 5 หลายเดือนก่อน

    Bonjour, merci pour ces vidéos comme d'habitude super génial !! :)
    J'ai deux petites questions :
    - Pourquoi les smart pointer fonctionnent sans l'entête (en tout cas de mon coté)? Est ce qu'il faut quand même l'inclure ?
    - Pourquoi std::shared_ptr fonctionne avec std::make_unique ? c'est quoi la différence fondamental entre std::make_shared et std::make_unique ?
    il y a plus de deux questions c'était un piège
    😁

    • @revaninio
      @revaninio  5 หลายเดือนก่อน +1

      Salut, le mieux c'est que tu rejoignes le serveur Discord (si c'est pas encore fait), histoire de centraliser les infos et de faire facilement participer tout le monde.
      Pour tes questions :
      1) C'est étrange, vérifie que le fichier d'entête n'est pas inclus ailleurs implicitement.
      2) C'est autorisé mais ce n'est pas recommandé, car le pointeur est stocké temporairement dans un unique_ptr, et est ensuite déplacé (std::move) vers un shared_ptr.

  • @Crealand
    @Crealand 11 หลายเดือนก่อน

    bonjour, merci pour les explications. Du coup, on peut récupérer l'adresse d'un pointeur intelligent via get() ou release mais du coup, on ne peut pas faire l'inverse ? A savoir récupérer l'adresse d'un pointeur brut pour un pointeur intelligent !? Ou faire l'équivalent d'un int* p =&a !? Plus possible de récupérer l'adresse d'une variable !? Ou pas l'utilité ? il ne peut gérer que des objets qu'il a lui même créé ou créé par un autre pointeur intelligent !?

    • @Crealand
      @Crealand 11 หลายเดือนก่อน

      ah j'ai fait des tests et quand on affecte un pointeur brut à un shared : std::shared_ptr ptr9(p1); avec p1 qui pointe sur une variable ou un objet, il y a un problème à la fin du programme lors des destructions...le shared est libéré donc il libère la mémoire de la variable pointée je pense et la variable qui est censé être libérée aussi (ou inversement) , il y a donc 2 libérations de mémoire pour une seule adresse, donc plantage au moment de l’exécution des destructeurs...! Avec la gestion "intelligente" de ces pointeurs, on ne peut que libérer un pointeur brut qui pointe sur un new objet..comme p1 = new type(xxx, xx, "xxx");

    • @revaninio
      @revaninio  11 หลายเดือนก่อน +1

      @@Crealand Bonjour, je vous avais répondu, mais visiblement le commentaire ne s'est pas enregistré.
      En fait, un smart pointer, que ce soit un unique pointer, un shared pointer ou un weak pointer, est une instance de classe et non une primitive.
      A moins d'implémenter une conversion soit même, il n'est pas possible de convertir l'un vers l'autre, c'est donc normal que l'assignation d'un smart pointer à un pointeur brut ne fonctionne pas.
      En revanche, vous pouvez faire quelque chose comme ça :
      int value = 8;
      std::shared_ptr sh_ptr = std::make_shared(value);
      int* raw_ptr = sh_ptr.get();

  • @manukouassi5963
    @manukouassi5963 หลายเดือนก่อน

    Bonjour, est ce qu'il y a un moyen d'avoir les codes après histoires de les reproduire pour s'entrainer? :p

    • @revaninio
      @revaninio  หลายเดือนก่อน

      Bonjour, quand j'aurais le temps, je les mettrai à disposition sur mon serveur Discord :)