Я читаю http://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.html, и мне все еще не понятны некоторые проблемы с безопасностью потоков:
- Стандарт гарантирует, что подсчет ссылок является потокобезопасным и независимым от платформы, верно?
- Аналогичная проблема - стандартные гарантии, что только один поток (содержащий последнюю ссылку) вызовет удаление для общего объекта, верно?
- shared_ptr не гарантирует безопасность потоков для объекта, хранящегося в нем?
РЕДАКТИРОВАТЬ:
Псевдокод:
// 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 другие потоки будут видеть только вновь созданный объект?
make_shared
вместоnew