一、概念

  • weak_ptr是一种不控制所指向对象生存期的智能指针,它指向一个shared_ptr管理的对象

  • 拥有“弱”共享的特点

最重要的特点

  • 一个对象被多个shared_ptr类所指向时,就会拥有多个引用计数

  • 但是当weak_ptr指向一个shared_ptr类所指向的对象时,该对象的引用计数不会增加

  • 因此,当最后一个对象的最后一个shared_ptr类被释放时,该对象会被释放。即使此时仍有weak_ptr指向该对象,该对象的内存仍然会被释放

二、weak_ptr类的基本使用

  • 我们需要用一个shared_ptr类来初始化weak_ptr类

也与wp无关
auto p=make_shared<int>(42);  //初始化一个shared_ptr对象weak_ptr<int> wp(p); //用p初始化wp,wp弱共享p//wp只是指向p所指的对象,p的引用计数没有改变,并且p所指对象的释放

四、lock函数的使用

  • 用来检测weak_ptr所指的对象是否仍然存在,如果存在就继续访问,不存在则做相应的处理

  • 返回值:

    • 如果weak_ptr所指的shared_pre引用计数为0,返回一个空的shared_ptr

    • 否则,返回一个shared_ptr对象

auto p=make_shared<int>(42);weak_ptr<int> wp(p);if(shared_ptr<int> np=wp.lock()){...//如果np不为空则执行if}else{  }

C++(STL):04---智能指针之weak_ptr相关推荐

  1. 深入学习c++--智能指针(二) weak_ptr(打破shared_ptr循环引用)

    1. 几种智能指针 1. auto_ptr: c++11中推荐不使用他(放弃) 2. shared_ptr: 拥有共享对象所有权语义的智能指针 3. unique_ptr: 拥有独有对象所有权语义的智 ...

  2. C++智能指针:weak_ptr实现详解

    文章目录 weak_ptr描述 声明 作用 原理实现 函数成员使用 总结 weak_ptr描述 声明 头文件:<memory> 模版类:template <class T> c ...

  3. 【C++11新特性】 C++11智能指针之weak_ptr

    http://blog.csdn.net/xiejingfa/article/details/50772571 原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/ar ...

  4. c++11新特性_【C++11新特性】 C++11智能指针之weak_ptr

    如题,我们今天要讲的是 C++11 引入的三种智能指针中的:weak_ptr. 在学习 weak_ptr 之前最好对 shared_ptr 有所了解.如果你还不知道 shared_ptr 是何物,可以 ...

  5. C++ STL 四种智能指针

    文章目录 0.前言 1.unique_ptr 2.auto_ptr 3.shared_ptr 3.1 shared_ptr 简介 3.2 通过辅助类模拟实现 shared_ptr 4.weak_ptr ...

  6. C++11中的智能指针unique_ptr、shared_ptr和weak_ptr详解

    目录 1.引言 2.什么是智能指针? 3.在Visual Studio中查看智能指针的源码实现 4.独占式指针unique_ptr 4.1.查看unique_ptr的源码实现片段 4.2.为什么uni ...

  7. Boost智能指针——weak_ptr

    循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象.一个简单的例子如下: #include <string> #include <ios ...

  8. 【Boost】boost库中智能指针——weak_ptr

    循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理循环引用的对象.一个简单的例子如下: #include <string> #include <ios ...

  9. [C++11]弱引用智能指针weak_ptr初始化和相关的操作函数

    弱引用智能指针 std::weak_ptr 可以看做是 shared_ptr 的助手,它不管理 shared_ptr 内部的指针.std::weak_ptr 没有重载操作符 * 和 ->,因为它 ...

最新文章

  1. Jenkins 服务重启方法
  2. 一文通俗了解对抗生成网络(GAN)核心思想
  3. 移动端H5 腾讯地图sdk 当前位置 地址你解析 距离计算
  4. 记录一次服务器大中间表优化的问题(数据倾斜的解决)
  5. BZOJ2535: [Noi2010]Plane 航空管制2(拓扑排序 贪心)
  6. php限制密码输入错误次数,js密码输入错误指定次数禁止输入
  7. 分享:ViewState压缩方法
  8. Python学习总结(2)——变量
  9. Windows XP 启动NetMeeting
  10. 微信发朋友圈如何只发文字?
  11. [SUCTF 2019]EasySQL1
  12. Shiro 实战教程(全)
  13. 5.庆功会-多重背包
  14. 第16集丨阳明心学量子力学
  15. 华为员工自杀-又是加班惹得祸
  16. 计算机金融学校排名2015,2015全国金融专业高校排名
  17. 结构体是纸老虎,旧知识新用法,easy
  18. 判断两条直线是否相交c语言,计算几何-两条线段是否相交(三种算法)
  19. 比勤奋更重要的,是学会正确思考
  20. Win10删除C盘临时文件

热门文章

  1. linux中线程的挂起与恢复(进程暂停)
  2. ubuntu ip设置
  3. java array_Java 数组
  4. vue打包代码反编译_Android逆向反编译代码注入APK过程思路分析
  5. postgresql+postgis安装
  6. 【转】CT中的“层“与“排“的区别
  7. 【转】ARM 之七 主流编译器(armcc、iar、gcc for arm、LLVM(clang))详细介绍
  8. 【转】2.2[译]async/await中阻塞死锁
  9. Sharepoin学习笔记—架构系列--01 Sharepoint的网页(Page),网页解析(Parsing)与解析安全处理(Security)
  10. NuGet是什么?理解与使用(下)