• weak_ptr是一种不控制所指向兑现生存周期的智能指针,它指向一个由shared_ptr管理的对象。
  • 引入lock和expired是防止在weak_ptr 不知情的情况下,shared_ptr 被释放掉
  • weak_ptr 不会更改shared_ptr 的引用计数。

weak_ptr

操作 说明
weak_ptr w 空weak_ptr可以指向类型为T的对象
weak_ptr w(sp) 与shared_ptr sp指向相同对象的weak_ptr,T必须可以指向类型为sp的对象
w=p p可以是一个shared_ptr或者一个weak_ptr。赋值后w与p共享对象
w.reset() 将w置为空
w.use_count() 与w共享对象的shared_ptr的数量
w.expired() 若w.use_count()为0,返回true,否则返回false
w.lock() 如果expired为true,返回一个空shared_ptr;否则返回一个指向w的对象的shared_ptr
//创建一个weak_ptr时,要用一个shared_ptr来初始化它:
auto p = make_shared<int>(42);weak_ptr<int> wp(p);//wp 弱共享p;p的引用计数未改变,因此使用时必须使用函数lock()p.reset();//释放p
if (shared_ptr<int> np = wp.lock()) {//如果np不空则条件成立  //在if中,np与p共享对象cout << "lock not null"<<endl;
}

C++ Primer 5th笔记(chap 12 动态内存)weak_ptr相关推荐

  1. C++ Primer 5th笔记(chap 12 动态内存)智能指针概述

    1. 对象的生存期 内存类型 定义 分配和销毁时机 全局对象 程序启动时分配,程序结束时销毁 静态内存 局部static对象类static数据成员 第一次使用时分配,程序结束时销毁 栈内存 定义在函数 ...

  2. C++ Primer 5th笔记(chap 12 动态内存)shared_ptr

    1. 相关概念 1.1 使用场景 • 程序不知道自己需要使用多少对象 • 程序不知道所需对象的准确类型 • 程序需要在多个对象间共享数据 1.2 实现原理 shared_ptr对象有一个关联的计数器, ...

  3. C++ Primer 5th笔记(chap 12 动态内存)allocator类

    1. 标准库allocator类及其算法 算法 说明 allocator <.T> a 定义了一个名为a的allocator对象,他可以为类型T的对象分配内存 a.allocate(n) ...

  4. C++ Primer 5th笔记(chap 12 动态内存)动态数组

    1. 初始化动态分配对象的数组 int *pia=new int[10]; //10个没有初始化的int int *pia2=new int[10](); //10个初始化为0的int string ...

  5. C++ Primer 5th笔记(chap 12 动态内存)unique_ptr

    1. 定义 定义一个unique_ptr时,需要将其绑定到一个new返回的指针上. unique_ptr p1; unique_ptr p2(new int(42)); 2. unique_ptr 不 ...

  6. C++ Primer Plus学习笔记之类和动态内存分配

    前言 个人觉得学习编程最有效的方法是阅读专业的书籍,通过阅读专业书籍可以构建更加系统化的知识体系. 一直以来都很想深入学习一下C++,将其作为自己的主力开发语言.现在为了完成自己这一直以来的心愿,准备 ...

  7. C++学习笔记-DLL中动态内存管理

    动态内存管理 在dll中malloc的内存,必须在dll中free 注:这是由Windows自己的特点决定! 如果 a 编译成静态库,有下面两种解决方法: 1.b.dll 和 c.dll 使用同一个款 ...

  8. C++ primer 5th笔记

    目录2022年11月25日 周五 阴 第一.二章:变量和基本类型 基本内置类型 unsigned float与double 'A'与"A" 布尔类型转换时 初始化与赋值 初始化 声 ...

  9. 读书笔记||类和动态内存分配

    一.动态内存和类 C++在分配内存的时候是让程序是在运行时决定内存分配,而不是在编译时再决定.C++使用new和delete运算符来动态控制内存.但是在类中使用这些运算符将导致许多新的编程问题,在这种 ...

最新文章

  1. 独家 | 如何全面解析数据并创造数据故事
  2. 解决 Iframe跨域session 丢失问题
  3. JUC并发编程二 并发架构--线程运行原理
  4. python字符串内建函数详解
  5. Nvidia 显卡区别(quadro、geforce、tesla)
  6. 15.4:泛型化方法
  7. (1) 自定义分页采用jsp和Java实现
  8. java 继承多态的一些理解和不理解
  9. 实现编辑功能有哪几个action_Web 应用的撤销重做实现
  10. 数字类 default 0和 default 0_全方位的数字规划工具Visual Components 4.0 数字化工厂仿真软件...
  11. Linux和Windows互传文件可视化工具lrzsz的安装和使用
  12. LeetCode——1710. 卡车上的最大单元数
  13. (一)SpringMVC学习笔记-概述
  14. centos安装python3.8.1_centos6.6下安装python3.8.1后报错??报错-问答-阿里云开发者社区-阿里云...
  15. HTML期末大作业~ 仿新浪微博个人主页html网站模板4个页面(HTML+CSS+JavaScript)
  16. mysql的casewhen 作用_MySQL数据库之Mysql casewhen的三种用法
  17. 孔夫子旧书网数据采集,举一反三学爬虫,Python爬虫120例第21例
  18. 2021年焊工(初级)模拟考试及焊工(初级)作业考试题库
  19. 广域网技术-PPP协议
  20. 桌面窗口管理器占用GPU高的解决办法

热门文章

  1. Python 函数参数的分类及使用方法
  2. dos的echo on与echo off命令用法实例讲解
  3. php实现微信清粉功能,PHP实现微信提现功能
  4. 环京机柜数量惊人 数据中心建设应避免一哄而上
  5. UPS远程监控系统的设计与实现
  6. Python之fastparquet:fastparquet的简介、安装、使用方法之详细攻略
  7. BC之CM:区块链之共识机制——深入浅出以及国内外当下主流区块链平台共识机制纵向、横向比较相关配图
  8. 成功解决ValueError: Invalid format string
  9. DL之NN:NN算法(本地数据集50000张训练集图片)进阶优化之三种参数改进,进一步提高手写数字图片识别的准确率
  10. jQuery .attr() vs .prop()