例如
struct A
{
vector<unique_ptr<int>> m_vector { make_unique<int>(1), make_unique<int>(2) };
};
我尝试上面但失败了。有没有办法初始化unique_ptr的载体?
答案 0 :(得分:8)
您无法从初始化列表移动,因为元素为const
。 §8.5.4[dcl.init.list] / p5:
std::initializer_list<E>
类型的对象是由一个构造的 初始化列表,好像实现分配了一个N
数组 类型const E
的元素,其中N是元素的数量 初始化列表。该数组的每个元素都使用复制初始化 初始化列表的对应元素,以及 构造std::initializer_list<E>
对象来引用它 阵列。
您只能复制,但不能复制unique_ptr
,因为它只是移动。
在构建向量后,您必须使用push_back
或emplace_back
等填充向量。