Я читаю 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