Почему нету atomic_ {store, load} для weak_ptr?

Почему стандарт C ++ включает atomic_store или же atomic_load перегрузка для shared_ptr, но нет weak_ptr?

Является ли это просто упущением, или есть реальная причина не обеспечивать атомарные операции для weak_ptr?

6

Решение

Это похоже на недосмотр. Существует стандартное проектное предложение 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

2

Другие решения

Предположительно, ответ заключается в том, что для того, чтобы использовать weak_ptrвы сначала конвертируете его в shared_ptr с помощью lock(), Как только у вас есть это shared_ptr Вы можете использовать атомарные операции.

1