Modern C++ std::shared_ptr的实现原理

news2024/10/3 10:43:17

shared_ptr的UML图

注意:这是Linux上GCC 8.5.0的实现版本
先看下它的继承关系。
在这里插入图片描述

shared_ptr里面的数据成员

有了上面的UML图,可能还没有一个直观的认识,下面我们把这些成员打印出来。
当然得先写个小小的程序:

$ cat shared_ptr.cpp
#include <memory>
#include <iostream>

int main(){
   
        int* ip = new int(100);
        std::shared_ptr<int> is1(ip);
        std::shared_ptr<int> is2(is1);
        std::cout<<"use count:"<<is2.use_count()<<std::endl;
        return 0;
}

is1构造完后,看下它的值:
在这里插入图片描述
is1有两个成员变量:

  1. _M_ptr: 为真正的指针的值,本例中即整形的地址。
  2. _M_refcount: 为__shared_count类型,仅包含一个指针,这个指针指向new出来的另外一个对象它包含两个整形成员(_M_use_count, _M_weak_count)

从内存角度看图是这样的:
在这里插入图片描述

小知识点:private是限制编译的,GDB是能访问它修饰的成员变量的。

shared_ptr的构造

相信看完上面的各种图和数据,大家应该能想想出来构造的过程。
这次我们step into第六行
在这里插入图片描述
shared_ptr的构造函数调用了基类__shared_ptr的构造函数
在这里插入图片描述
之后new了一个_Sp_counted_ptr,我就不一步步走下去了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1412573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单元测试——题目十二

目录 题目要求: 定义类 测试类 题目要求: 根据下列流程图编写程序实现相应处理,执行j=10*x-y返回文字“j1=:”和计算值,执行j=(x-y)*(10⁵%7)返回文字“j2=:”和计算值,执行j=y*log(x+10)返回文字“j3=:”和计算值。 编写程序代码,使用JUnit框架编写测试类对编写的…

【开源】基于JAVA语言的实验室耗材管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 耗材档案模块2.2 耗材入库模块2.3 耗材出库模块2.4 耗材申请模块2.5 耗材审核模块 三、系统展示四、核心代码4.1 查询耗材品类4.2 查询资产出库清单4.3 资产出库4.4 查询入库单4.5 资产入库 五、免责说明 一、摘要 1.1…

RHCE项目:使用LNMP搭建私有云存储

目录 一、准备工作 1、关闭防火墙、安全软件 2、搭建LNMP环境 3、上传软件 4、设置nextcloud安装命令权限 二、数据库 1、设置数据库 2、重启数据库 三、配置nginx 四、安装nextcloud 五、内网穿透 1、创建内网映射 2、linux系统安装花生壳客户端 3、重新打开浏览…

《幻兽帕鲁》爆火,玩家在阿里云上部署联机服务器:全程仅3分钟

《幻兽帕鲁》大卖800万份&#xff0c;玩家纷纷上阿里云光速搭建联机服务器 《幻兽帕鲁》爆火&#xff0c;玩家在阿里云上部署联机服务器&#xff1a;全程仅3分钟 1月26日消息&#xff0c;生存类游戏《幻兽帕鲁》异常火爆&#xff0c;发售仅6天销量就突破了800万份&#xff0c;在…

在docker中配置 Linux ls 配色方案 与 shell 提示符

发行版中默认的配置一般非常合理&#xff0c;但是docker中往往忽略了这些简单的配置&#xff0c;备忘一下 1. ls 配色方案 vim &#xff5e;/.bashrc 在文件最末尾加入如下一行内容&#xff1a; export LS_COLORS"rs0:di01;34:ln01;36:mh00:pi40;33:so01;35:do01;35:bd40…

APUE学习之管道(pipe)与命名管道(fifo)

目录 一、简介 二、管道&#xff08;Pipe&#xff09; 1、管道的基本概念 2、管道的局限性 3、管道的创建 4、管道的读写规则 5、实战演练 三、命名管道&#xff08;fifo&#xff09; 1、命名管道的基本概念 2、命名管道的创建 3、实战演练 4、运行结果 四、补充 …

深入理解stress/stress-ng

文章目录 一、概述二、安装2.1、源码编译安装2.2、命令行安装2.3、安装确认 三、重要参数详解3.1、查询支持的参数3.2、重要参数说明 四、实例4.1、压测CPU4.2、压测内存4.3、压测IO4.4、压测磁盘及IO4.5、压测磁盘及CPU 团队博客: 汽车电子社区 一、概述 stress是一种工作负载…

Java基础进阶03-注解和单元测试

目录 一、注解 1.概述 2.作用 3.自定义注解 &#xff08;1&#xff09;格式 &#xff08;2&#xff09;使用 &#xff08;3&#xff09;练习 4.元注解 &#xff08;1&#xff09;概述 &#xff08;2&#xff09;常见元注解 &#xff08;3&#xff09;Target &#x…

Codewave学习体验分享:低代码开发世界的黑马

前言 Codewave平台介绍 CodeWave智能低代码开发平台基于网易自研拥有大规模参数和深度学习能力的智能模型底座产品架构,为企业级应用提供更加智能化研发的软件生产方式,IT人员可以轻易实现从“智能生成”到“可视化拖拽调整”的全栈低代码应用搭建,让复杂应用开发更加高效,加快…

百度百科词条编辑规则是什么?

百度百科词条编辑规则是指在百度百科平台上编辑和创建词条时需要遵循的一系列标准和指南。百度百科作为全球最大的中文百科全书&#xff0c;旨在为用户提供准确、全面、客观的知识信息。为了确保词条内容的质量&#xff0c;百度设定了严格的编辑规则。伯乐网络传媒来给大家分享…

2 搭建模块环境

2.1 架构的问题分析 当前要开发的是媒资管理服务&#xff0c;目前为止共三个微服务&#xff1a;内容管理、系统管理、媒资管理&#xff0c;如下图&#xff1a; 后期还会添加更多的微服务&#xff0c;当前这种由前端直接请求微服务的方式存在弊端&#xff1a; 如果在前端对每…

电脑监控软件都有哪些,哪款好用 | 四款热门软件盘点

在信息化时代&#xff0c;电脑已经成为我们工作和生活中不可或缺的工具。然而&#xff0c;随着电脑使用的普及&#xff0c;也带来了一些安全和隐私方面的问题。 为了保护企业的机密资料和员工的行为规范&#xff0c;越来越多的企业开始使用电脑监控软件来加强管理和监控。 本…

常见问题-d3dx9_39.dll丢失如何解决,快速修复d3dx9_39.dll丢失教程

d3dx9_39.dll 是一个动态链接库&#xff08;DLL&#xff09;文件&#xff0c;它是微软 DirectX 组件的一部分&#xff0c;主要用于支持 3D 图形和声音处理功能。这个文件通常在运行需要 DirectX 支持的游戏或应用程序时被调用。 一、d3dx9_39.dll文件属性 以下是 d3dx9_39.dl…

如何解决Flutter应用程序的兼容性问题

随着移动应用开发领域的不断发展&#xff0c;Flutter作为一种跨平台框架&#xff0c;受到了越来越多开发者的青睐。要确保Flutter应用程序能够在不同的设备和操作系统上稳定运行&#xff0c;并提供一致的用户体验&#xff0c;我们需要重视应用程序的兼容性问题。下面将简单的介…

「阿里云」幻兽帕鲁个人服务器已上线,3分钟快速搭建

基于阿里云搭建幻兽帕鲁服务器方法&#xff0c;1到2分钟部署完成&#xff0c;稳定运行无卡顿&#xff0c;阿里云服务器网aliyunfuwuqi.com分享保姆级手把手教程&#xff0c;基于阿里云计算巢、云服务器或无影云桌面都可以&#xff1a; 基于阿里云幻兽帕鲁服务器创建教程 基于…

在线教育SSR网站项目

Nuxt3 Vue3开发的在线教育SSR 一、首页 二、考试页 三、拼团 四、秒杀 五、直播 六、专栏 七、电子书 八、社区 九、课程 十、用户中心

idea快速解决jar包重复导入或冲突

1、下载 Maven Helper 插件 File -> settings -> plugins 2、启动项目&#xff0c;报jar重复导入或者冲突 3、找到需要解决冲突的pom文件&#xff0c;点击Dependency Analyzer

Go 从标准输入读取数据

fmt.Scan系列 fmt.Scan函数定义如下&#xff1a; // Scan scans text read from standard input, storing successive space-separated values into successive arguments. // Newlines count as space. // It returns the number of items successfully scanned. // If tha…

JavaWeb基础01-基本技术体系介绍和相关工具的安装

一、JavaWeb 1.概述 Web&#xff1a;全球广域网&#xff0c;也称为万维网(www)&#xff0c;能够通过浏览器访问的网站JavaWeb&#xff1a;是用Java技术来解决相关web互联网领域的技术栈 2.组成 &#xff08;1&#xff09;网页&#xff1a;展示数据&#xff08;前端技术&…

服务器是什么?(四种服务器类型)

服务器 服务器定义广义: 专门给其他机器提供服务的计算机。狭义:一台高性能的计算机&#xff0c;通过网络提供外部计算机一些业务服务 个人PC内存大概8G&#xff0c;服务器内存128G起步 服务器是什么 服务器指的是 网络中能对其他机器提供某些服务的计算机系统 &#xff0c;相对…