如何使用unique_ptr初始化结构的向量?例如:
#include <memory>
#include <vector>
using namespace std;
struct A
{
int i;
unique_ptr<int> p;
};
int main()
{
vector<A> v{ { 10, make_unique<int>(10) } };
// error above: cannot convert from initializer-list to vector<A>
return 0;
}
答案 0 :(得分:1)
vector<A> v{ { 10, make_unique<int>(10) } };
在上面语句的内部括号中,你是聚合初始化A
的一个实例,到目前为止一直很好。
但是现在没有办法将这个实例移出初始化列表,你唯一可以做的就是复制对象。但是,复制将失败,因为A
因为unique_ptr
数据成员而隐式删除了A
的编译器生成的复制构造函数。因此编译错误。
唯一的解决方法是不使用braced-init-list。而是构造v.push_back(std::move(a));
的实例,然后使用
{{1}}