如何使用unique_ptr初始化结构的向量?

时间:2014-04-03 00:03:47

标签: c++ c++11 initialization

如何使用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;
}

1 个答案:

答案 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}}