Construct unordered_map with a value_type of unique_ptr
Construct unordered_map with a value_type of unique_ptr
这段代码似乎不起作用,因为唯一指针被存储到一个对对象中,然后试图从中复制。这能避免吗?
std::unordered_map<std::string,std::unique_ptr<int>> _map {
{"hello", std::make_unique<int>(7)}
};
完整的代码示例和编译错误可以在这里看到 http://cpp.sh/7uc3a
是的,不使用列表初始化。
std::unordered_map<std::string,std::unique_ptr<int>> _map;
_map.insert({"hello", std::make_unique<int>(7)});
std::unordered_map
需要调用复制或移动构造函数,以便将任何键和值存储在其内部缓冲区中。在std::unique_ptr
的情况下,复制构造函数被删除,因为复制std::unique_ptr
会使它根本不是唯一的。这只剩下移动构造函数。 问题在于初始化地图的方式:
std::unordered_map<std::string,std::unique_ptr<int>> _map {
{"hello", std::make_unique<int>(7)}
};
您正在使用std::initializer_list
初始化地图的值。
从 cpp 首选项:
std::initializer_list 类型的对象是一个轻量级代理对象,提供对const T类型的对象数组的访问。
实际上,初始值设定项列表中的所有值都是常量值。这意味着无法调用std::unique_ptr
上的移动构造函数,因为移动对象通常需要修改原始实例。由于无法移动std::unique_ptr
,编译器会回退到复制构造函数,这就是为什么它最终会抱怨复制构造函数被删除的原因。
我发布的代码段之所以有效,是因为insert
接受一个非常量std::pair
,这意味着std::unique_ptr
是非常量,并且可以调用其移动构造函数。
相关文章:
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 继承类时"invalid use of incomplete type ‘class tree_node_t’"
- 模板类和'invalid use of incomplete type'错误
- 如何修复" State Error (active) E0513 a value of type "const wchar_t *" cannot be assigned to an entity o
- "invalid use of incomplete type" .解决循环依赖关系
- 我用C++做了一个计算器,但我对"type of calculator"的要求循环了两次。有人可以帮助指出我的错误吗?
- 如何修复此"argument of type incompatible with parameter"错误?
- 在 c++ 中,如果包含标头,为什么我会收到'does not a name of type'错误?
- 让编译器告诉哪些方法不具体,而不是错误'invalid new-expression of abstract class type'
- "base operand of ‘->’ has non-pointer type" 但它是指针
- "a value of type " void (exeCallback::*)(int) " cannot be assigned to an entity of type " void (*)(
- "Allocating an object of abstract class type"错误,尽管所有函数都有实现
- C++错误:" 'class' does not name a type"和"invalid use of incomplete type ‘struct ...' "
- 获取"Use of undefined type"和"Must have class/struct/union"错误
- 另一个"invalid initialization of reference of type"错误
- "invalid initialization of non-const reference of type..." 克隆() 函数错误
- 禁用杂散"warning: left shift count >= width of type"
- 抽象类和虚方法问题:"cannot allocate an object of abstract type"
- C++:离奇发生的"Request for member X of Y which is of non-class type Z"
- 返回 type of const int &