san*_*nta 0 c++ smart-pointers unique-ptr
我无法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();
}
Run Code Online (Sandbox Code Playgroud)
完整的错误消息显示:
'std :: unique_ptr> :: unique_ptr(const std :: unique_ptr <_Ty,std :: default_delete <_Ty >>&)':尝试引用已删除的函数
它不是功能,它是循环......
for (auto j : t)
Run Code Online (Sandbox Code Playgroud)
...试图依次复制初始化j每个元素t.回想一下,普通auto意味着价值语义.改为使用引用:
for (auto const& j : t)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
85 次 |
| 最近记录: |