矢量容器和unique_ptr

时间:2013-01-26 05:34:31

标签: c++ vector c++11 unique-ptr

我已经搜索了几个小时的解决方案,并尝试了不同的方法来解决与unique_ptr相关的编译错误,并且没有复制/不分配。我甚至写了一个隐藏的副本并分配,以防止矢量无法调用它。

以下是导致编译错误的代码:

class World{
    World(const World&) {}
    World& operator=(const World&) {return *this; }

    std::vector<std::vector<std::unique_ptr<Organism>>> cell_grid;
public:
    World() {
        cell_grid = std::vector<std::vector<std::unique_ptr<Organism>>> (20, std::vector<std::unique_ptr<Organism>> (20, nullptr));
    }
    ~World() {}
};

编译错误与私有成员访问问题有关。

1 个答案:

答案 0 :(得分:3)

问题是使用这个vector构造函数:

vector(size_type n, const T& value);

此构造函数创建长度为vector的{​​{1}},并且每个n元素都有n副本。由于无法复制valueunique_ptr也无法复制),因此无法使用此构造函数。而是这样做:

vector<unique_ptr>

第一行调用World() : cell_grid(20) { for (auto& row : cell_grid) row.resize(20); } 的默认构造函数,创建20个大小0 vector<unique_ptr> s。

然后循环将每个vector<unique_ptr>的大小调整为大小== 20,每个元素都是默认构造的vector<unique_ptr>(其值为unique_ptr)。