我正在尝试创建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。 编译器应该给出编译时错误