vector<unique_ptr<>>初始化(所有权转移)

最后更新于:2022-04-01 06:44:10

##实战c++中的vector系列--vector<unique_ptr<>>初始化(所有权转移) C++11为我们提供了智能指针,给我们带来了很多便利的地方。 那么如果把unique_ptr作为vector容器的元素呢? 形式如出一辙:`vector<unique_ptr<int> > vec;` 但是怎么给vec添加元素呢? 看下面: ~~~ #include<iostream> #include<vector> #include <memory> using namespace std; int main() { vector<unique_ptr<int>> vec; vec.push_back(1);//错误 return 0; } ~~~ 那么先定义一个unique_ptr,再进行push_back(): ~~~ #include<iostream> #include<vector> #include <memory> using namespace std; int main() { vector<unique_ptr<int>> vec; unique_ptr<int> sp(new int(126)); vec.push_back(sp);//尝试引用已删除的函数 return 0; } ~~~ 这就是unique智能指针的所有权问题,这个时候就需要使用std::move: ~~~ #include<iostream> #include<vector> #include <memory> using namespace std; int main() { vector<unique_ptr<int>> vec; unique_ptr<int> sp(new int(126)); //vec.push_back(1); vec.push_back(std::move(sp));//尝试引用已删除的函数 cout << *vec[0]<< endl; // 输出126 //cout << *sp << endl; return 0; } ~~~ 但是此时,上面代码的sp编程了什么呢? 使用*取值看一下,结果程序崩溃,原因何在?  就是此时sp已经释放,所有权转移了!
';