Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1904 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  boost::shared_ptr et std::auto_ptr

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

boost::shared_ptr et std::auto_ptr

n°2176523
in_your_ph​ion
Posté le 19-02-2013 à 22:14:31  profilanswer
 

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".
 

Code :
  1. std::vector< std::auto_ptr<int> > vec; // this is BAD, right ?


 
Est ce de même pour les shared_ptr ? Par exemple :
 

Code :
  1. std::vector< boost::shared_ptr<int> > vec; // this is OK, right ?


 
est-il acceptable ?
 
 
merci

mood
Publicité
Posté le 19-02-2013 à 22:14:31  profilanswer
 

n°2176525
Farian
Posté le 19-02-2013 à 22:36:54  profilanswer
 

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 :)

n°2176554
in_your_ph​ion
Posté le 20-02-2013 à 10:42:44  profilanswer
 

thx !
 
anybody pour une réponse aujourd'hui ? :)

n°2176592
Polo37
Posté le 20-02-2013 à 13:10:10  profilanswer
 

in_your_phion a écrit :

thx !
 
anybody pour une réponse aujourd'hui ? :)


 
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.

n°2176682
boblenain2​00
Posté le 20-02-2013 à 19:45:32  profilanswer
 

http://stackoverflow.com/questions [...] shared-ptr
 
Et puis boost auto_ptr est déprécié

n°2176689
Amonchakai
Posté le 20-02-2013 à 20:37:50  profilanswer
 

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...


Message édité par Amonchakai le 20-02-2013 à 20:42:43
n°2176735
Farian
Posté le 21-02-2013 à 08:18:41  profilanswer
 

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 !

n°2176930
theshockwa​ve
I work at a firm named Koslow
Posté le 21-02-2013 à 18:55:24  profilanswer
 

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 ...


---------------
last.fm

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  boost::shared_ptr et std::auto_ptr

 

Sujets relatifs
queue avec variables conditionnelles (boost)questions d'entretien sur Boost ?
Quel outil pour faire des sites web de façon semi autoBoost dijkstra : recuperer l'intégralité du chemin
Script pour suppression auto fichier de logmarge auto entre plusieurs images
Remettre a zéro les numéro autooptimisation SSE pour du code C (auto ou inline) [résolu]
Adaptation auto. Page Web / RésolutionFormulaire auto (dynamique ou non)
Plus de sujets relatifs à : boost::shared_ptr et std::auto_ptr


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR