Я читаю http://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.html, и некоторые проблемы безопасности потока все еще не ясны для меня:
- Стандарт гарантирует, что подсчет ссылок обрабатывается поточно-безопасным и независимым от платформы, не так ли?
- Аналогичная проблема - стандарт гарантирует, что только один поток (содержащий последнюю ссылку) вызовет удаление на общем объекте, правильно?
- shared_ptr не гарантирует безопасность потока для объекта, хранящегося в нем.
EDIT:
Псевдокод:
// 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));
Вызов reset() в потоке IV удалит предыдущий экземпляр класса A, созданного в первом потоке, и заменит его новым экземпляром? Более того, после вызова reset() в IV потоке другие потоки будут видеть только вновь созданный объект?