37 template <
typename... Args>
39 :
_ptr(
std::forward<Args>(args)...) {}
59 void store(std::shared_ptr<T> ptr)
noexcept {
60 std::atomic_store_explicit(
63 std::memory_order_release
71 void reset(std::shared_ptr<T> ptr =
nullptr) noexcept {
79 std::shared_ptr<T>
load() const noexcept {
80 return std::atomic_load_explicit(
82 std::memory_order_acquire
93 std::shared_ptr<T>* expected,
94 std::shared_ptr<T> desired)
noexcept {
95 return std::atomic_compare_exchange_strong_explicit(
99 std::memory_order_acq_rel,
100 std::memory_order_acq_rel
114 store(std::move(ptr));
AtomicSharedPtr(const AtomicSharedPtr &rhs)
拷贝构造函数
AtomicSharedPtr & operator=(std::shared_ptr< T > ptr) noexcept
智能指针赋值运算符
std::shared_ptr< T > _ptr
内部存储的智能指针
AtomicSharedPtr(AtomicSharedPtr &&)=delete
禁用移动构造函数
void store(std::shared_ptr< T > ptr) noexcept
原子存储新的智能指针
AtomicSharedPtr & operator=(AtomicSharedPtr &&)=delete
禁用移动赋值运算符
std::shared_ptr< T > load() const noexcept
原子加载当前指针值
AtomicSharedPtr & operator=(const AtomicSharedPtr &rhs) noexcept
拷贝赋值运算符
bool compare_exchange(std::shared_ptr< T > *expected, std::shared_ptr< T > desired) noexcept
原子比较并交换操作
void reset(std::shared_ptr< T > ptr=nullptr) noexcept
重置指针值
AtomicSharedPtr(Args &&... args)
构造函数,完美转发参数到shared_ptr