为什么存在shared_ptr的原子重载

Cur*_*ous 4 c++ smart-pointers shared-ptr c++11

为什么有用于原子重载shared_ptr所描述这里,而不是那里是一个专门用于std::atomic与交易shared_ptr秒.似乎与C++标准库的其余部分采用的面向对象模式不一致.

并且只是为了确保我做对了,当使用shared_ptrs来实现读取副本更新时,我们需要通过这些函数对共享指针进行所有访问(读取和写入)吗?

use*_*177 7

因为:

std :: atomic可以用任何TriviallyCopyable类型T实例化.

资料来源:http://en.cppreference.com/w/cpp/atomic/atomic

std::is_trivially_copyable<std::shared_ptr<int>>::value == false;
Run Code Online (Sandbox Code Playgroud)

因此,你不能实例化std::atomic<>std::shared_ptr<>.但是,自动内存管理在多线程中很有用,因此提供了这些重载.那些重载很可能不是无锁定的(std::atomic<>首先使用的一个重要因素); 他们可能会使用锁来提供同步性.

至于你的第二个问题:是的.