2

我已经搜索了几个小时来寻找解决方案,并尝试了不同的方法来解决unique_ptr与无复制/无分配相关的编译错误。我什至写了一个隐藏的副本并分配以防止vector调用它无济于事。

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

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() {}
};

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

4

1 回答 1

3

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

vector(size_type n, const T& value);

这个构造函数创建了一个vector的长度n,每个n元素都有一个的副本value由于unique_ptr不能被复制(a 也不能vector<unique_ptr>),所以不能使用这个构造函数。而是这样做:

World()
    : cell_grid(20)
{
    for (auto& row : cell_grid)
        row.resize(20);
}

第一行调用 的默认构造函数vector<unique_ptr>,创建 20 个 size 0 vector<unique_ptr>s。

然后循环将每个vector<unique_ptr>s 的大小调整为 size == 20,每个元素都是默认构造的unique_ptr(将具有 value nullptr)。

于 2013-01-27T15:39:18.867 回答