std::unique_ptr release的使用
2024-09-08 03:14:52
在c++中,动态内存管理是通过new/delete 运算符来进行的。由于确保在正确的时间释放内存是很困难的,为了避免内存泄漏,更加容易,安全地使用动态内存,C++11标准库提供了两种智能指针类型来管理动态对象。只能指针的行为类似于常规指针,重要的区别是它负责自动释放所指的对象。
std::shared_ptr , 允许多个指针指向同一个对象
std::unique_ptr, 独占所指向的对象
std::unique_ptr 是 c++11中用来取代 std::auto_ptr 指针的指针容器。 它不能与其他unique_ptr类型的指针对象共享所指对象的内存。这种所有权仅能够通过std::move函数来转移。unique_ptr是一个删除了拷贝构造函数、保留了移动构造函数的指针封装类型。
调用release 会切断unique_ptr 和它原来管理的对象的联系。release 返回的指针通常被用来初始化另一个智能指针或给另一个智能指针赋值。如果不用另一个智能指针来保存release返回的指针,程序就要负责资源的释放。
#include <iostream>
#include <memory> int main() { std::unique_ptr<int> uptr(new int(10)); //绑定动态对象
//std::unique_ptr<int> uptr2 = uptr; //不能賦值
//std::unique_ptr<int> uptr2(uptr); //不能拷内
std::unique_ptr<int> uptr2 = std::move(uptr); //轉換所有權 if(uptr == nullptr)
printf("uptr give up *int\n"); int * p = uptr2.release(); //uptr2释放对指针的控制权,返回指针,并将uptr2置为空 if(uptr2 == nullptr)
printf("uptr2 give up *int\n"); printf("%d\n", *p);
delete p; return 0;
}
输出结果:
[daq@centos build]$ ./hello-exe/cmake-good
uptr give up *int
uptr2 give up *int
10
最新文章
- tg2015 信息传递 (洛谷p2661)
- 开发错误记录9:Application无法跳转到Activity
- TJOI2016 &;&; HEOI2016 解题报告
- 李洪强iOS开发支付集成之支付宝支付
- 【原创】Linux 增加系统调用
- 记“debug alipay”一事
- MySQL中关于日期、时间的数据类型和函数
- Location-aware Associated Data Placement for Geo-distributed Data-intensive Applications--INFOCOM 2015
- Repeated Substring Pattern Leetcode
- 微信小程序之给项目设置id后提示不在合法域名列别中
- h5 canvas 图片上传操作
- HDU 1754 I Hate It(线段树之单点更新,区间最值)
- python_如何使用临时文件
- Android Studio打包过程和应用安装过程
- Android学习之基础知识九—数据存储(持久化技术)
- python使用cx_Oracle在Linux和Windows下的一点差异
- wpf学习
- Hdu2819 Swap
- ubuntu14.04_install_gitlab_platform
- Openresty最佳案例 | 第4篇:OpenResty常见的api