转载请注明出处:

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使用数组相关推荐

  1. 使用 std::shared_ptr 和 std::unique_ptr 测试 boost/pointer_cast.hpp

    使用 std::shared_ptr 和 std::unique_ptr 测试 boost/pointer_cast.hpp 实现功能 C++实现代码 实现功能 使用 std::shared_ptr ...

  2. 【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能够记录对象被引用的次数,主要被用来管理动 ...

  3. C++11 std::shared_ptr的std::move()移动语义底层分析

    std::shared_ptr的std::move()移动语义底层分析 执行std::move()之前: 执行std::move()之后: 结论:一个浅拷贝 sizeof(std::shared_pt ...

  4. 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 ...

  5. c语言 ptr 用法,C++之智能指针std::shared_ptr简单使用和理解

    1  智能指针std::shared_ptr相关知识和如何使用 我们这里先说下智能指针std::shared_ptr,因为我看到我我们项目c++代码里面用得很多,我不是不会,所以记录学习下 先让ubu ...

  6. C++ 智能指针std::shared_ptr简单使用和理解

    参考:https://blog.csdn.net/u011068702/article/details/83692838 1  智能指针std::shared_ptr相关知识和如何使用 我们这里先说下 ...

  7. 线程和std::shared_ptr智能指针使用

    //定义线程指针 std::unique_ptr<std::thread> thread_; //指向定义函数 threadCapture_.reset(new std::thread([ ...

  8. std::shared_ptr 详解

    一.介绍 shared_ptr是一种智能指针(smart pointer),作用有如同指针,但会记录有多少个shared_ptrs共同指向一个对象.这便是所谓的引用计数(reference count ...

  9. c++11 智能指针 (std::shared_ptr)(一)

    定义于头文件 <memory> template< class T > class shared_ptr; (C++11 起) std::shared_ptr 是通过指针保持对 ...

最新文章

  1. 《 百度大脑AI技术成果白皮书》,介绍百度大脑5.0,附48页PDF下载
  2. # Writing your-first Django-app-part 4-simple-form
  3. OpenCV 升降维度
  4. 04-iOS蓝牙传输数据演示
  5. POJ2446-Chessboard【最大匹配,二分图,奇偶建图】
  6. python获取id标签对应数据_Python--Scrapy爬虫获取简书作者ID的全部文章列表数据
  7. 喜讯 | 国际智慧城市大会巨杉喜获两项大奖
  8. php5.2 array,详解php 5.2.x 数组操作实例
  9. Linux之whereis命令
  10. Java不满足的依赖异常_java – 新的缺失/不满足的依赖项WildFly 9中的错误
  11. 同一个路由器下的不同网段如何实现ping通
  12. R6300V2 从 DD-WRT 回刷恢复 官方原厂固件   DD-WRT to R6300V2
  13. c++编写植物大战僵尸
  14. 数据库MySQL学习心得
  15. TCPreplay libdnet安装失败情况下安装/tcpreplay yum install 方式安装
  16. zoj3987—Numbers(贪心)
  17. 显卡天梯图vs专业计算卡丽台T4,v100vs混合精度训练
  18. python的cfg是什么模块_使用安装模块设置.py以及设置.cfg
  19. 霍纳法则(Horner‘s rule)
  20. oracle游标等待,Oracle Mutex 等待事件之: cursor mutex X

热门文章

  1. MySQL中的行级锁,表级锁,页级锁
  2. 节省3500万的背后,运维如何兼顾成本与效率?
  3. Redis 面试题 50 问,史上最全
  4. 多线程:synchronize、volatile、Lock 的区别与用法
  5. 在当前PJ项目pj_nath模块加入mysql的一些问题
  6. 4.HTTPS与HTTP的区别
  7. 触摸屏mtp文件转c语言,F28335与上位机(触摸屏)之间的通讯遵循modbus协议使用C语言编程...
  8. 但凡网络工程师会这个技能,也不至于天天抱怨工资低
  9. 5G边缘计算与算力网络(PPT)
  10. 云上效率提升指南 | K8S和Serverless还能这么玩