在项目中碰到一个问题,需使用一个atomic<int>值做为map容器的值,但是用普通的方法会报类似下面的错误
error C2248: std::atomic<__int64>::atomic
: cannot access private member declared in class std::atomic<__int64>
error: use of deleted function std::atomic<long int>::atomic(const std::atomic<long int>&)
有以下两种方法可以选择,我是使用的第一种
#include <atomic>
#include <map>
#include <tuple>
typedef std::atomic<int64_t> value_t;
typedef std::map<uint64_t, value_t> atomic_map_t;
int main()
{
int64_t in = 5;
atomic_map_t map;
map.emplace(std::piecewise_construct,
std::forward_as_tuple(1), std::forward_as_tuple(in));
auto it = map.find(1);
int64_t out = it->second.load();
return 0;
}
#include <atomic>
#include <map>
#include <memory>
using atomic_ptr_t = std::shared_ptr<std::atomic<int64_t>>;
typedef std::map<uint64_t, atomic_ptr_t> value_map_t;
int main()
{
value_map_t map;
map[1] = atomic_ptr_t(new std::atomic<int64_t>(0));
return 0;
}
看详细的可以看:https://stackoverflow.com/questions/35091396/stdatomic-as-a-value-of-stdmap