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 :

attributs partagés: les shared pointers sont la solutions?


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
    Janvier 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 79
    Par défaut attributs partagés: les shared pointers sont la solutions?
    Bonjour,

    j'ai des objets de type A dont un attribut est un pointeur vers un objet de type B. Cet objet de type B n'existe que pour être utilisé par un objet de type A et doit donc être supprimé lorsque l'objet qui l'utilise est supprimé.
    Cependant, plusieurs objets de type A peuvent avoir leur attribut pointant vers le même objet de type B. Il ne faut donc pas que le destructeur de A supprime l'objet B pointé par l'attribut. Mais alors, quand tous les objets A seront supprimés, l'objet B sera toujours dans la mémoire alors qu'il devrait être supprimé.

    Est ce que transformer l'attribut de A en shared pointer vers un objet B est la bonne solution à mon problème?

    Est ce que je peux créer de nombreux shared pointers sans trop affecter mes ressources mémoires et temps CPU?

    Merci d'avance!!!

  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,
    As-tu lus les 2 tutoriels suivant : Présentation des pointeurs intelligents en C++, par Loïc Joly et Boost.SmartPtr : Les pointeurs intelligents de Boost par Matthieu Brucher ?

    De ce que tu décris, effectivement, les shared pointeur t'apportent une solution à ton problème.
    Quand aux problèmes de perfs : en gros tu rajoutes un compteur de référence sur ton pointeur partagé et éventuellement une indirection supplémentaire s'il n'y a pas d'inlining. Si tu es sur PC, prouve-moi que cela a un impact mesurable sur tes perfs

  3. #3
    Membre Expert
    Avatar de poukill
    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 155
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 155
    Par défaut
    +1.
    La perte en perf est tellement minime que tu la verras pas. En plus, vu le gain avec les shared_ptr au niveau "safety", ce serait une hérésie que de ne pas les utiliser dans ton cas.

    D'ailleurs, comment faire autrement ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 79
    Par défaut
    Merci de vos réponses! Je vais utiliser les shared_ptr!!!

    D'autre part, en y réflechissant, il y a peu de cas où les shared_ptr ne sont pas utiles par rapport aux pointeurs "nus".

    Est ce qu'il y a des cas où vous utilisez des pointeurs nus plutot que des shared_ptr? Pour un "void func( const type * ptr )" ou un "const type * getter()", par exemple?

  5. #5
    Membre Expert
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Par défaut
    Non pour ce genre de chose j'utilise des références...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 79
    Par défaut
    citation de boost.org
    A simple guideline that nearly eliminates the possibility of memory leaks is: always use a named smart pointer variable to hold the result of new. Every occurence of the new keyword in the code should have the form:

    shared_ptr<T> p(new Y);
    Si tout le monde faisait cela, on ne verrai jamais aucun "pointeur nu", non?
    Qu'est ce que vous en pensez?
    Il y a des cas où il vaut mieux utiliser des pointeurs nus???

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/09/2015, 09h31
  2. jointures dont les 2 membres sont des select
    Par rémi_tounul dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 26/04/2005, 14h56
  3. [VB6]Enumérer les attributs et les méthodes d'une classe
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 04/05/2004, 18h34
  4. Est-ce que les fichiers .obj sont tous les mêmes?
    Par Bubonik software dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 30/12/2003, 21h04
  5. Les Langages ne sont pas tous les mêmes ......
    Par Max Payne dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 28/08/2003, 13h51

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