Je lis http://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.html et certaines questions de sécurité des threads ne sont pas encore claires pour moi :
- La norme garantit-elle que le comptage des références est géré de manière thread-safe et qu'il est indépendant de la plate-forme, n'est-ce pas?
- Une question similaire - la norme garantit-elle qu'un seul thread (détenant la dernière référence) appellera delete sur l'objet partagé, n'est-ce pas?
- shared_ptr ne garantit aucune sécurité des threads pour l'objet stocké en son sein?
EDIT:
Code pseudo:
// Thread I
shared_ptr a (new A (1));
// Thread II
shared_ptr b (a);
// Thread III
shared_ptr c (a);
// Thread IV
shared_ptr d (a);
d.reset (new A (10));
Appeler reset() dans le thread IV supprimera l'instance précédente de la classe A créée dans le premier thread et la remplacera par une nouvelle instance? De plus, après avoir appelé reset() dans le thread IV, les autres threads ne verront que le nouvel objet créé?
26 votes
À droite, à droite et à droite.
19 votes
Vous devriez utiliser
make_shared
au lieu denew
2 votes
En réponse à toutes les questions (depuis l'édition) : juste, juste, juste, faux et faux.
0 votes
J'ai essayé de donner la réponse soutenue ici