我正在尝试将unique_ptr与任何stl容器一起使用(实际上list更适合我),我看到unique_ptr需要移动语义。 这个代码,其中employee是基类:
typedef std::unique_ptr<employee> p_employee;
std::list<p_employee> make_test_array() {
std::list<p_employee> objects = {
p_employee(new accounter(...)),
p_employee(new engineer(...)),
p_employee(new developer(...))
};
return objects;
}
你看到我正在尝试做什么 - 只需从函数中返回此列表
那么有能力做到这一点吗?什么是正确的技术?
答案 0 :(得分:4)
您正在尝试使用带有std::list<p_employee>
参数的std::list
构造函数构造std::initializer_list<p_employee>
。
不幸的是,std::initializer_list
只允许const
访问其元素,这意味着编译器会尝试复制失败的每个p_employee
(或std::unique_ptr<employee>
),因为{{1} 1}}是一种只移动类型,无法复制。
如果您将 braced-init-list 替换为一系列unique_ptr
/ emplace_back
来电,您的代码应该有效。
push_back