实战c++中的vector系列--vector<unique_ptr<>>初始化(所有权转移)
2015-12-17 21:05
585 查看
C++11为我们提供了智能指针,给我们带来了很多便利的地方。
那么如果把unique_ptr作为vector容器的元素呢?
形式如出一辙:
但是怎么给vec添加元素呢?
看下面:
那么先定义一个unique_ptr,再进行push_back():
这就是unique智能指针的所有权问题,这个时候就需要使用std::move:
但是此时,上面代码的sp编程了什么呢? 使用*取值看一下,结果程序崩溃,原因何在?
就是此时sp已经释放,所有权转移了!
那么如果把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已经释放,所有权转移了!
相关文章推荐
- C++省略参数(va_list va_start va_arg va_end)的简单应用
- 基于模板元编程技术的跨平台C++动态链接加载库
- C++ 折半插入排序算法
- 汉洛塔递归实现的思考(C语言)
- 汉洛塔递归实现的思考(C语言)
- 汉洛塔递归实现的思考(C语言)
- C语言:指针类型强制性转换
- 一些公司的2016年校招C/C++开发岗笔试题目(四)
- OC语言——传入时间与现在时间 差距 60 秒以内,输出@"刚刚" 以此类推
- 《用C++语言编写一个程序,求PI的值》
- C++时间标准库时间Time及系统时间的调用
- C++11引用限定符
- visual studio下实现图形函数调用
- 第9周项目4-广义表算法库(4.1).cpp
- 第9周项目3-稀疏矩阵的三元组表示的应用(3.2).cpp
- 第9周项目1 - 猴子选大王(数组版).cpp
- 第9周项目2 - 对称矩阵压缩存储的实现与应用(2).cpp
- 第9周项目2 - 对称矩阵压缩存储的实现与应用(1).cpp
- 第8周项目5 - 计数的模式匹配.cpp
- 第7周项目项目6 - 停车场模拟.cpp