Ich lese http://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.html und einige Probleme mit der Thread-Sicherheit sind mir immer noch nicht klar:
- Standard garantiert, dass die Referenzzählung threadsicher und plattformunabhängig ist, oder?
- Ähnliches Problem - Standard garantiert, dass nur ein Thread (der die letzte Referenz enthält) delete für ein freigegebenes Objekt aufruft, oder?
- shared_ptr garantiert keine Thread-Sicherheit für darin gespeicherte Objekte?
BEARBEITEN:
Pseudocode:
// 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));
Durch Aufrufen von reset () in Thread IV wird die vorherige Instanz einer im ersten Thread erstellten Klasse gelöscht und durch eine neue Instanz ersetzt. Darüber hinaus sehen andere Threads nach dem Aufruf von reset () im IV-Thread nur neu erstellte Objekte?
make_shared
anstelle vonnew