简 述: C++11 智能指针的深入分析,和动手实现简版的智能指针 std::shared_ptrstd::unique_ptr

文章目录

  • 背景
  • std::shared_ptr
    • 原理
    • 代码
    • reference
  • std::unique_ptr
    • 原理
    • 代码
    • reference
  • 系列

本文初发于 “偕臧的小站”,同步转载于此。

背景

实现原理提前需要理解 特殊成员函数std::exchange() C++14std::swap()std::move()constexprexplicitnoexcept 等,若是遗忘可参考此文

  • C++ 类的六个特殊成员函数
  • C++ 11/14/17 的新特性 占位

最后,Demo 实现或许不够十分完美和严谨,但对于其理解智能指针的原理和面试手写实现时候,足够。若有纰漏,请指正。

std::shared_ptr

原理

  • shared_ptr 的原理: 通过引用计数的方式来实现多个 shared_ptr 对象之间共享资源。

  • 通过引用计数和模板来实现 shared_ptr;构造函数定义的时候,要初始化其指针、引用计数、和 mutex

  • “copy assignment constructor” 除了校验是否相等、是否为空的时候、拷贝时要先释放旧资源,旧的引用计数 -1,赋值后再指向对新的资源的引用计数 +1

  • 释放资源时,要先校验是否存在,及计数为 0 才释放;

代码

C++ 实现智能指针:shared_ptr 和 unique_ptr相关推荐

  1. C++智能指针shared_ptr、unique_ptr以及weak_ptr

    目录 shared_ptr类 shared_ptr和unique_ptr都支持的操作 shared_ptr独有的操作 make_shared函数 shared_ptr自动销毁所管理的对象 由普通指针管 ...

  2. 智能指针shared_ptr、unique_ptr、weak_ptr

    智能指针 智能指针解决的问题 智能指针分类 shared_ptr 内存模型图 shared_ptr示例 shared_ptr含义 shared_ptr基本用法及常用函数 常用函数 智能指针的构造,初始 ...

  3. 智能指针(shared_ptr、unique_ptr、weak_ptr)的使用

    智能指针的使用 一.shared_ptr 1.创建一个shared_ptr 2.shared_ptr的常用成员函数 reset成员函数的使用 3.==注意事项== 二.unique_ptr 1.uni ...

  4. 学习笔记 | c++中的smart pointer四个智能指针 shared_ptr、unique_ptr、weak_ptr、auto_ptr

    c++中的smart pointer四个智能指针 C++里面的四个智能指针: auto_ptr, shared_ptr, weak_ptr, unique_ptr其中后三个是c++11支持,并且第一个 ...

  5. C++ 使用智能指针shared_ptr/unique_ptr管理数组

    目录 零.要管理的类 一.使用shared_ptr管理数组 二.使用unique_ptr管理数组 1.第一种方式 2.第二种方式 关于shared_ptr/unique_ptr的基础,我不在本篇博客中 ...

  6. 智能指针shared_ptr的用法

    智能指针shared_ptr的用法 2016-12-03 15:39 by jiayayao, 360 阅读, 0 评论, 收藏, 编辑 为了解决C++内存泄漏的问题,C++11引入了智能指针(Sma ...

  7. 智能指针shared_ptr

    如果有可能就使用unique_ptr,然后很多时候对象是需要共享的,因此shared_ptr也就会用得很多.shared_ptr允许多个指向同一个对象,当指向对象的最后一个shared_ptr销毁时, ...

  8. 智能指针shared_ptr的几个例子

    #include <string> #include <iostream> #include <memory> //智能指针定义在头文件memory中,例如shar ...

  9. C++ 智能指针(二) std::unique_ptr

    C++ STL智能指针系列: C++ 智能指针(一) std::auto_ptr C++ 智能指针(二) std::unique_ptr C++ 智能指针(三) std::shared_ptr C++ ...

  10. C++的智能指针auto_ptr、unique_ptr源码解析

    C++的智能指针auto_ptr.unique_ptr源码解析 1.前言 2.源码准备 3.源码解析 3.1.auto_ptr解析 3.2.unique_ptr解 3.3.unique_ptr的一个偏 ...

最新文章

  1. eclipse 汉化教程(语言包)
  2. 12 FI配置-财务会计-分配会计核算原理至分类帐组
  3. ecshop插件_ECSHOP和SHOPEX快递单号查询中通快递插件V8.6专版
  4. NetDevOps常用数据库python实战-influxDB_grafana
  5. Introduction to Computer Networking学习笔记(一):网络层模型及IP header
  6. 游戏设计类毕业论文文献(推荐10篇)
  7. java 软考_关于软考
  8. 从产品经理到产品架构师
  9. 用 SIR 模型拟合疫情感染情况
  10. SVN分支合并冲突解决
  11. Xshell上传文件到Linux服务器上
  12. Dell EMC Isilon命令行方式添加一个接口到pool
  13. 如何学计算机打字,电脑如何快速学会打字
  14. 7-26 出生年 (15分)
  15. android 轮换实现动画,怎么在Android中实现一个首页无限轮播功能
  16. Javascript实现数字转中文大写
  17. 阿朱,是时候拥抱 Linux 了!
  18. C# 操作Excel单元格格式
  19. MFS-学习总结(基础概念)
  20. 2.利用计算机进行信息加工的一般过程是:,信息加工

热门文章

  1. MyBatis-Plus Generator v3.5.1 最新代码自动生成器
  2. 等一等!看一看!缓一缓!
  3. 云原生运行时的下一个五年
  4. win10浏览器主页被篡改的解决办法
  5. 固态硬盘开卡维修教程,MAP1202、IG5236、SM2259XT2等主控均适用
  6. Vmware虚拟机的介绍
  7. elasticsearch里面bulk的用法
  8. IROS2020开源软硬件!多激光雷达的协同定位建图及在线外参自标定
  9. 校园二手交易商城系统小程序-JAVA【数据库设计、源码、开题报告】
  10. MTK 开发流程和开发环境