【发布时间】:2016-04-20 17:28:14
【问题描述】:
我有一个类Foo,有一个std::vector<std::unique_ptr<Bar>>类型的成员变量,我想填写这个类的构造函数的初始化列表。这可能吗?
我希望可以使用向量的填充构造函数,像这样
Foo::Foo(int n):
vector<unique_ptr<Bar>> (n, unique_ptr<Bar> (new Bar))
{}
但我认为这需要std::unique_ptr 的复制构造函数,它被删除(应该是)(unique_ptr(const unique_ptr&) = delete)。
有没有更好的方法来解决这个问题?
【问题讨论】:
-
你是对的,因为你只调用一次
new Bar,所以你的尝试是行不通的,而对于唯一指针的向量,你需要为每个元素调用一次new Bar。我想你最好只使用emplace_back的循环。 -
或者,您可以用空的
unique_ptrs 填充构造,然后循环调用每个reset(new Bar)。 -
在 C++ 获得可迭代协程之前,我认为你最好的选择是循环。
-
@zneak 以前从未听说过“可迭代协程”。有解释的链接吗?
标签: c++ c++11 vector stl unique-ptr