我已经搜索了几个小时的解决方案,并尝试了不同的方法来解决与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() {}
};
编译错误与私有成员访问问题有关。
答案 0 :(得分:3)
问题是使用这个vector
构造函数:
vector(size_type n, const T& value);
此构造函数创建长度为vector
的{{1}},并且每个n
元素都有n
的副本。由于无法复制value
(unique_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
)。