如何在c ++中返回唯一所有权

时间:2018-04-24 12:44:30

标签: c++ smart-pointers unique-ptr

我无法从函数中移动 std :: vector< std :: unique_ptr< ..>> :
 MSVC抱怨(C2280)关于尝试引用已删除的函数。





这将如何运作?




  #include< vector>
#包括< iostream>
 #include< memory>

使用命名空间std;

 class foo {
 public:
 int i;
};

 vector< unique_ptr< foo>> test(){
矢量<&的unique_ptr LT; FOO>> RET {};

 auto f = make_unique< foo>();
 f-> i = 1;
 ret.push_back(移动(F));

 return move(ret);
}

 int main(int argc,char ** argv){
 auto t = test();
 for(auto j:t){
 //在这里失败: -  ^
 cout<< j-> i<< ENDL;
 }

 getchar();
}
  




完整的错误消息为:







'std :: unique_ptr> :: unique_ptr(const std :: unique_ptr< _Ty,std :: default_delete< _Ty >>&)':尝试引用已删除的函数






1 个答案:

答案 0 :(得分:6)

这不是功能,而是循环......

for (auto j : t)

...尝试依次为j的每个元素复制初始化t。回想一下,普通auto意味着价值语义。改为使用引用:

for (auto const& j : t)