boost::shared_ptr et std::auto_ptr - C++ - Programmation
Marsh Posté le 19-02-2013 à 22:36:54
Bonjour !
De mémoire, nous avons dans le cadre d'un projet utilisé intensivement des vector de shared_ptr, sans le moindre souci.
Je vous confirme ça demain en regardant dans le code correspondant
Marsh Posté le 20-02-2013 à 10:42:44
ReplyMarsh Posté le 20-02-2013 à 13:10:10
in_your_phion a écrit : thx ! |
C'est tout à fait acceptable (je le fait sur mes projets) mais il me semble que ce n'est pas conseillé au niveau des performances (sur mes projets c'est pas franchement visible, faut voir ce qui se fait chez boost, il me semble que c'est sur une de leur lib que j'avais lu ça)
Si JoelF passe dans le coin je pense qu'il te donnera une réponse plus précise sur l'histoire des performances.
Marsh Posté le 20-02-2013 à 19:45:32
http://stackoverflow.com/questions [...] shared-ptr
Et puis boost auto_ptr est déprécié
Marsh Posté le 20-02-2013 à 20:37:50
De souvenir, faut justement pas utiliser les std::auto_ptr. C'est l'équivalent d'un boost::scoped_ptr sauf que dans boost, ils ont eu l'intelligence d'interdire sa copie.
Le std::auto_ptr, si tu en fait une copie et si copie est détruite tu perds ton pointeur. Et le std::auto_ptr qui avait été copié pointe maintenant sur de la mémoire désalouée.
Dc c'est bien naze.
Le boost::shared_ptr ajoute un compteur du nombre de copie et libère la mémoire quand la dernière copie est détruite.
edit: et dc dans ton vector ne surtout pas mettre de std::auto_ptr car au moindre resize du conteur (genre par ex. pour ajouter un nouvel élément) tu as plein de copies qui se font et tu perds du coup tous tes pointeurs...
Marsh Posté le 21-02-2013 à 08:18:41
Je ne peux qu'approuver ce qui est dit sur l'utilisation des "shared_ptr", qui, après vérification, fonctionnent en effet très bien dans des vecteurs.
Pour les "auto_ptr", ne les ayant jamais utilisés, je ne peux rien apporter de plus
Bonne continuation !
Marsh Posté le 21-02-2013 à 18:55:24
Par contre, c'est important de bien faire attention à un point : un pointeur utilisé dans un shared_ptr ne doit plus jamais être utilisé nu ...
Vu que l'implémentation n'est pas intrusive, si tu construis séparément deux shared_ptr à partir du même pointeur nu, leurs compteurs de référence seront séparés ...
Marsh Posté le 19-02-2013 à 22:14:31
bonsoir,
Il me semble qu'il est déconseillé d'utiliser des auto_ptr dans les conteneurs de la STL, à cause du transfert "d'ownership".
Est ce de même pour les shared_ptr ? Par exemple :
est-il acceptable ?
merci