(译+原)std::shared_ptr及std::unique_ptr使用数组
转载请注明出处:
http://www.cnblogs.com/darkknightzh/p/5462363.html
参考网址:
http://stackoverflow.com/questions/13061979/shared-ptr-to-an-array-should-it-be-used
默认情况下,std::shared_ptr会调用delete来清空内存。当使用new[] 分配内存时,需要调用delete[] 来释放内存,否则会有内存泄露。
可以通过以下代码来自定义释放内存的函数:
1 template< typename T > 2 struct array_deleter 3 { 4 void operator ()(T const * p) 5 { 6 delete[] p; 7 } 8 };
通过以下代码来声明std::shared_ptr指针:
std::shared_ptr<int> sp(new int[10], array_deleter<int>());
此时,shared_ptr可正确的调用delete[]。
在C++11中,可以使用 std::default_delete代替上面自己写的array_deleter:
std::shared_ptr<int> sp(new int[10], std::default_delete<int[]>());
也可以使用一下的lambda表达式来自定义删除函数
std::shared_ptr<int> sp(new int[10], [](int *p) { delete[] p; });
实际上,除非需要共享目标,否则unique_ptr更适合使用数组:
std::unique_ptr<int[]> up(new int[10]); // this will correctly call delete[]
ps,上面代码可以正确的分配空间,但是空间内的值都没有初始化。如果需要默认初始化为0,可以使用下面的代码:
std::unique_ptr<int[]> up(new int[10]()); // this will correctly call delete[] 初始化为0
ps2,使用vector时,可以通过fill函数来将vector中所有元素置为默认值。
vector<unsigned char> data(dataLen); std::fill(data.begin(), data.end(), 0);
(译+原)std::shared_ptr及std::unique_ptr使用数组相关推荐
- 使用 std::shared_ptr 和 std::unique_ptr 测试 boost/pointer_cast.hpp
使用 std::shared_ptr 和 std::unique_ptr 测试 boost/pointer_cast.hpp 实现功能 C++实现代码 实现功能 使用 std::shared_ptr ...
- 【c++】4.std::shared_ptr、std::make_shared、 .get() 、.data()、void *p 的用法、裸指针
std::shared_ptr.std::make_shared. .get() ..data().void *p 的用法.裸指针 (1)shared_ptr能够记录对象被引用的次数,主要被用来管理动 ...
- C++11 std::shared_ptr的std::move()移动语义底层分析
std::shared_ptr的std::move()移动语义底层分析 执行std::move()之前: 执行std::move()之后: 结论:一个浅拷贝 sizeof(std::shared_pt ...
- std::make_shared<T>/std::make_unique<T>与std::shared_ptr<T>/std::unique_ptr<T>的区别与联系
(1).std::make_shared<T>与std::make_unique<T>相对于std::shared_ptr<T>/std::unique_ptr&l ...
- c语言 ptr 用法,C++之智能指针std::shared_ptr简单使用和理解
1 智能指针std::shared_ptr相关知识和如何使用 我们这里先说下智能指针std::shared_ptr,因为我看到我我们项目c++代码里面用得很多,我不是不会,所以记录学习下 先让ubu ...
- C++ 智能指针std::shared_ptr简单使用和理解
参考:https://blog.csdn.net/u011068702/article/details/83692838 1 智能指针std::shared_ptr相关知识和如何使用 我们这里先说下 ...
- 线程和std::shared_ptr智能指针使用
//定义线程指针 std::unique_ptr<std::thread> thread_; //指向定义函数 threadCapture_.reset(new std::thread([ ...
- std::shared_ptr 详解
一.介绍 shared_ptr是一种智能指针(smart pointer),作用有如同指针,但会记录有多少个shared_ptrs共同指向一个对象.这便是所谓的引用计数(reference count ...
- c++11 智能指针 (std::shared_ptr)(一)
定义于头文件 <memory> template< class T > class shared_ptr; (C++11 起) std::shared_ptr 是通过指针保持对 ...
最新文章
- 《 百度大脑AI技术成果白皮书》,介绍百度大脑5.0,附48页PDF下载
- # Writing your-first Django-app-part 4-simple-form
- OpenCV 升降维度
- 04-iOS蓝牙传输数据演示
- POJ2446-Chessboard【最大匹配,二分图,奇偶建图】
- python获取id标签对应数据_Python--Scrapy爬虫获取简书作者ID的全部文章列表数据
- 喜讯 | 国际智慧城市大会巨杉喜获两项大奖
- php5.2 array,详解php 5.2.x 数组操作实例
- Linux之whereis命令
- Java不满足的依赖异常_java – 新的缺失/不满足的依赖项WildFly 9中的错误
- 同一个路由器下的不同网段如何实现ping通
- R6300V2 从 DD-WRT 回刷恢复 官方原厂固件 DD-WRT to R6300V2
- c++编写植物大战僵尸
- 数据库MySQL学习心得
- TCPreplay libdnet安装失败情况下安装/tcpreplay yum install 方式安装
- zoj3987—Numbers(贪心)
- 显卡天梯图vs专业计算卡丽台T4,v100vs混合精度训练
- python的cfg是什么模块_使用安装模块设置.py以及设置.cfg
- 霍纳法则(Horner‘s rule)
- oracle游标等待,Oracle Mutex 等待事件之: cursor mutex X
热门文章
- MySQL中的行级锁,表级锁,页级锁
- 节省3500万的背后,运维如何兼顾成本与效率?
- Redis 面试题 50 问,史上最全
- 多线程:synchronize、volatile、Lock 的区别与用法
- 在当前PJ项目pj_nath模块加入mysql的一些问题
- 4.HTTPS与HTTP的区别
- 触摸屏mtp文件转c语言,F28335与上位机(触摸屏)之间的通讯遵循modbus协议使用C语言编程...
- 但凡网络工程师会这个技能,也不至于天天抱怨工资低
- 5G边缘计算与算力网络(PPT)
- 云上效率提升指南 | K8S和Serverless还能这么玩