Czytam http://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.html i niektóre problemy z bezpieczeństwem wątków nadal nie są dla mnie jasne:
- Standardowo gwarantuje, że zliczanie referencji jest obsługiwane wątkowo i niezależne od platformy, prawda?
- Podobny problem - standardowa gwarancja, że tylko jeden wątek (trzymający ostatnią referencję) wywoła delete na udostępnionym obiekcie, prawda?
- shared_ptr nie gwarantuje żadnego bezpieczeństwa wątków dla przechowywanych w nim obiektów?
EDYTOWAĆ:
Pseudo kod:
// Thread I
shared_ptr<A> a (new A (1));
// Thread II
shared_ptr<A> b (a);
// Thread III
shared_ptr<A> c (a);
// Thread IV
shared_ptr<A> d (a);
d.reset (new A (10));
Wywołanie reset () w wątku IV spowoduje usunięcie poprzedniej instancji klasy A utworzonej w pierwszym wątku i zastąpienie jej nową instancją? Ponadto po wywołaniu reset () w wątku IV inne wątki będą widzieć tylko nowo utworzony obiekt?
make_shared
zamiastnew