C ++ 11:我们可以创建`std :: shared_ptr`类型`std :: atomic`变量

时间:2016-05-23 11:45:39

标签: c++ c++11 gcc

我正在尝试创建std::shared_ptr类型std::atomic变量。 在线编译compiler

#include <iostream>
#include <memory>
#include <atomic>
//using namespace std;

class abc
{
public:
std::atomic <std::shared_ptr <int>> abl;
std::shared_ptr<int> a;  

void set(int x)
{
    abl.store(std::make_shared<int>(10) , std::memory_order_relaxed);
}

void out()
{
    a = abl.load(std::memory_order_relaxed);
    std::cout<< "value" << *a;
}
};

int main()
{
    abc ab;
    ab.set(10);
    ab.out();
    std::cout << "Hello World"; 

    return 0;
}

但得到以下错误

error: static assertion failed: std::atomic requires a trivially copyable type                                              
       static_assert(__is_trivially_copyable(_Tp), 

但是当我在我的linux机器上使用编译器版本gcc 4.8(C ++ 11)尝试它时,它已成功编译但崩溃了。

我浏览this,发现shared_ptr肯定不是TriviallyCopyable。 编译器应该给出编译时错误

0 个答案:

没有答案