c++11 - 接口(interface)的shared_ptr的atomic_store

标签 c++11 shared-ptr atomic

我正在尝试以原子方式设置shared_ptr的值:

shared_ptr<Base> a = std::make_shared<Derived>();
....
shared_ptr<Base> b;
std::atomic_store(&b,a); // Error here

我收到错误消息“'std::shared_ptr< Base >' 不是从 'volatile std::atomic<_ITp>' 派生的”

如何解决这个问题?谢谢。

最佳答案

std::shared_ptr 有一个专门的atomic_store,请参阅

http://en.cppreference.com/w/cpp/memory/shared_ptr/atomic

通过现代编译器(例如 GCC 5),您提供的代码可以很好地编译。所以我想你的编译器不完全支持 C++11(就像 GCC 4.x 一样,缺乏特化)。

关于c++11 - 接口(interface)的shared_ptr的atomic_store,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44246366/

相关文章:

c++ - 忙于轮询 std::atomic - msvc 优化了循环 - 为什么以及如何防止?

java - Perl 共享变量的原子性和可见性

algorithm - 错误 : no matching function for call to 'swap'

c++ - 确保 vector 中的共享指针被正确推回

c++ - C/C++ 中的结构赋值是原子的吗?

c++ - 多次调用 make_shared() 时的 shared_ptr 垃圾回收

c++ - typedef 包含模板化类的共享指针

c++ - 如何在 C++ 中创建一个构造函数来创建线程开始运行时应该返回的 pthread

c++ - 为什么将 std::bind 与 lambda 一起使用时生成的对象如此之大?

c++ - 常量和重载构造函数