如何在一行内正确地调整一个unique_ptr向量的大小,而不会让gcc报告关于已删除函数的编译错误?
vector<vector<unique_ptr<A> >> a;
a.resize(..... )
更新: 这是我使用的代码,可以正常工作。
int width, height;
vector<vector<unique_ptr<A> >> a;
a.resize(width);
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
a.at(i).emplace_back(new A());
如果可能的话,我希望可以一次性调整大小,就像调整向量的大小一样。
vector<vector<int>> intObj;
intObj.resize(width, vector<int>(height, int()));
但是,每当我尝试使用以下方法调整上述向量的大小时,就会出现以下错误;
a.resize(x, vector<unique_ptr<A>>(y, unique_ptr<A>()));
error: use of deleted function ‘std::unique_ptr<_Tp, _Dp>::unique_ptr(const std::unique_ptr<_Tp, _Dp>&) [with _Tp = A; _Dp = std::default_delete<A>]’
感谢您的选择。
vector<vector<...>>
对我来说是代码异味。你应该使用一个大小为width*height
的单一向量,而不是向量的向量。注意:如果进行此更改,则可以调用a.resize(width*height)
。 - Simplevector<vector<>>
更具可扩展性,因为用于保存数据的内存不需要连续,这对于大量数据可能是必要的。此外,我见过太多错误计算偏移量的情况... - Simon Kraemeremplace_back(new A())
会造成内存泄漏。不要这样做;使用push_back(make_unique<A>())
。 - T.C.