Почему стандарт C ++ включает atomic_store
или же atomic_load
перегрузка для shared_ptr
, но нет weak_ptr
?
Является ли это просто упущением, или есть реальная причина не обеспечивать атомарные операции для weak_ptr
?
Это похоже на недосмотр. Существует стандартное проектное предложение C ++ (17?) Херба Саттера для atomic_shared_ptr / atomic_unique_ptr / atomic_weak_ptr, документ также объясняет недостатки существующего подхода с помощью бесплатных функций atomic_load / atomic_store для shared_ptr: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4162.pdf
Предположительно, ответ заключается в том, что для того, чтобы использовать weak_ptr
вы сначала конвертируете его в shared_ptr
с помощью lock()
, Как только у вас есть это shared_ptr
Вы можете использовать атомарные операции.