【发布时间】:2018-04-24 12:44:29
【问题描述】:
我无法从函数中移动 std::vector<std::unique_ptr<..>>:
MSVC 抱怨 (C2280) 试图引用已删除的函数。
这将如何工作?
#include <vector>
#include <iostream>
#include <memory>
using namespace std;
class foo {
public:
int i;
};
vector<unique_ptr<foo>> test() {
vector<unique_ptr<foo>> ret{};
auto f = make_unique<foo>();
f->i = 1;
ret.push_back(move(f));
return move(ret);
}
int main(int argc, char** argv) {
auto t = test();
for (auto j : t) {
// fails here: --^
cout << j->i << endl;
}
getchar();
}
完整的错误信息如下:
'std::unique_ptr>::unique_ptr(const std::unique_ptr<_ty>> &)': 试图引用已删除的函数
【问题讨论】:
-
错误信息指向foreach循环。
-
对不起,在路上
-
return move(ret);return ret;就足够了。 -
您知道range-based
forloop 是如何工作的吗?您尝试做的是复制向量中的值。 -
我试图移动(ret),因为我认为复制可能会发生在那里。
标签: c++ smart-pointers unique-ptr