【发布时间】:2019-11-02 13:06:22
【问题描述】:
我正在尝试在包含原子的地图中构造一个对象,因此它既不能被复制也不能移动 AFAICT。
我对 C++ reference 的解读是 map emplace 应该能够做到这一点。但是由于已删除或不存在构造函数,以下代码无法编译。使用make_pair 没有帮助。
#include <atomic>
#include <unordered_map>
class Z {
std::atomic<int> i;
};
std::unordered_map<int, Z> map;
void test(void) {
map.emplace(0, Z()); // error
map[0] = Z(); // error
}
这可能吗?如果不可能,为什么不呢?
编辑:编译器是 gcc 4.8.1,在 Linux 上
【问题讨论】:
-
你用什么编译器?
-
emplace接受构造函数参数,但您传递的是一个临时对象。 -
@NeilKirk 那么如何调用无参数构造函数呢?
-
map[0];似乎有效。 -
std::unordered_map<int, std::shared_ptr<Z>> map;怎么样?
标签: c++ c++11 move-semantics stdatomic