我正在尝试将 a 替换为std::unordered_map
a tbb::concurrent_hash_map
。
我的原始代码:
typedef std::unique_ptr<V> V_ptr;
std::unordered_map<K, V_ptr> hm;
V_ptr v (new V);
K k;
hm.insert (std::make_pair (k, std::move (v)));
用clang 3.3编译得很好。将 unordered_map 切换到 concurrent_hash_map:
typedef std::unique_ptr<V> V_ptr;
tbb::concurrent_hash_map<K, V_ptr> hm;
V_ptr v (new V);
K k;
hm.insert (std::make_pair (k, std::move (v)));
导致错误:...stl_pair.h:105:21: error: call to deleted constructor of
'std::unique_ptr<...
这是clang 3.3中的错误吗?我记得在许多容器中使用 std::unique_ptrs 时 gcc 4.5 中存在类似的错误。(例如,上面的原始代码不能使用 gcc 4.5 编译。)或者我错过了有关 concurrent_hash_maps 的一些内容?