IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Boost C++ Discussion :

Une petite synthèse sur la transmission des shared_ptr


Sujet :

Boost C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 230
    Par défaut Une petite synthèse sur la transmission des shared_ptr
    Bonsoir à tous,

    vous allez trouvez la question certainement un peu redondante mais les explications fournies ainsi que les exemples me semblent trop complexes, enfin je veux dire qu'avec des exemples plus simples on comprendrait plus parfaitement.

    Je vous donne donc un exemple vraiment trivial :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    typedef shared_ptr<Classe1> Classe1_ptr;
     
    Classe1_ptr fonction1() {
       return Classe1_ptr(new Classe1("test"));
    }
     
    main() { //Pour simplifier... ;)
    Classe1_ptr p = fonction1();
    }
    C'est trivial hein ?

    Ce je voudrais savoir c'est si au retour de fonction1() mon pointeur intelligent a un use_count() de 1 ou de 0 ?

    Je suis un peu perturbé car en Objective-C on nous dit de faire systématiquement un [p retain] pour augmenter le compteur et un [p release] à la fin pour le décrémenter.

    Ici je serais tenté de faire un Classe1_ptr(p) pour augmenter le compteur...

    J'ai fait des tests : et le use_count au retour est bien de 1, mais va-t-il le rester ? Si je fais Classe1_ptr(p), le use_count passe à 2, ce qui est logique. Est-ce que je prends un risque vis-à-vis de la destruction, est-ce que c'est nécessaire ou inutile ?


    Sinon petite question subsidiaire :
    S'agissant d'un vector<Classe1_ptr>, si je le récupère en retour d'une fonction, quel est le use_count des éléments qu'il contient ? Ne prenais-je pas le risque de voir son contenu disparaitre si je n'agis pas sur le compteur des éléments ?

    je vous remercie pour ces éclaircissements qui je suis sur seront de nature à aider les autres qui comme moi pataugent un peu avec cette syntaxe (je suis plus à l'aise en Objective-C je l'avoue...)

    Salutations
    Tristan

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Salut,
    Je ne suis pas sur de bien comprendre tes angoisses. Mais si shared_ptr est bien implémenté, tu n'as pas à t'occuper du compteur de référence. L'implémentation doit te garantir la cohérence du compteur selon les copies faites ou les variables détruites (par sortie de scope, de destruction du conteneur vecteur ou autre classe).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 230
    Par défaut
    justement ce qui m'angoisse comme tu dis c'est de ne pas savoir quel est le scope dans mon cas :
    le shared_ptr est créé dans la fonction, logiquement en sortant de la fonction il doit disparaitre non ?
    Voilà pourquoi je me demande si je ne devrais protéger le shared_ptr qui m'est retourné en le "copiant" ?

  4. #4
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par esteban Voir le message
    justement ce qui m'angoisse comme tu dis c'est de ne pas savoir quel est le scope dans mon cas :
    le shared_ptr est créé dans la fonction, logiquement en sortant de la fonction il doit disparaitre non ?
    Voilà pourquoi je me demande si je ne devrais protéger le shared_ptr qui m'est retourné en le "copiant" ?
    Pour faire simple, le retour effectue une copie.

    En outre, si tu fais une copie dans la fonction, cette copie sera aussi détruite à la fin de la fonction. La copie ne changerait donc rien au compteur de référence.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    230
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 230
    Par défaut
    ben voilà c'est tout à fait simple comme réponse.

    Est-ce que c'est pareil pour les vector ?

    merci

  6. #6
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    Pour faire simple, le retour effectue une copie..
    en théorie, c'est juste. En pratique, la NRVO change la donne
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Une petite question sur des tableaux
    Par l.laurent60 dans le forum Langage
    Réponses: 9
    Dernier message: 31/05/2012, 16h39
  2. une petite question sur la texture des images
    Par katicr2 dans le forum Traitement d'images
    Réponses: 7
    Dernier message: 03/02/2010, 15h24
  3. une petite question sur des arguments du unix shell
    Par kinkichin dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 22/09/2009, 12h25
  4. Réponses: 24
    Dernier message: 29/08/2005, 13h33
  5. copier une petite texture sur une grosse texture
    Par gaut dans le forum DirectX
    Réponses: 5
    Dernier message: 15/10/2004, 22h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo