如何创建包含std :: atomic的std :: pair?

时间:2019-03-20 21:52:30

标签: c++ std atomic std-pair stdatomic

我不知道如何创建以下内容:

std::pair<std::atomic<bool>, int>

我总是会得到

  

/ usr / include / c ++ / 5.5.0 / bits / stl_pair.h:139:45:错误:使用已删除的函数'std :: atomic :: atomic(const std :: atomic&)'
    :第一个(__x),第二个(std :: forward <_U2>(__ y)){}

我尝试过

std::pair<std::atomic<bool>, int> pair = std::make_pair(true, 1); //doesn't work
std::pair<std::atomic<bool>, int> pair = std::make_pair({true}, 1); //doesn't work
std::pair<std::atomic<bool>, int> pair = std::make_pair(std::atomic<bool>(true), 1); //doesn't work
std::pair<std::atomic<bool>, int> pair = std::make_pair(std::move(std::atomic<bool>(true)), 1); //doesn't work

我知道std :: atomic是不可复制的,那么您应该如何成对创建它?只是不可能吗?

1 个答案:

答案 0 :(得分:7)

您可以这样做:

std::pair<std::atomic<bool>, int> p(true, 1);

这使用true初始化原子的第一个成员,而没有任何多余的复制或移动。在C ++ 17中,保证复制省略还允许您编写:

auto p = std::pair<std::atomic<bool>, int>(true, 1);