C++ 实现智能指针:shared_ptr 和 unique_ptr
简 述: C++11 智能指针的深入分析,和动手实现简版的智能指针 std::shared_ptr
、std::unique_ptr
文章目录
- 背景
- std::shared_ptr
- 原理
- 代码
- reference
- std::unique_ptr
- 原理
- 代码
- reference
- 系列
本文初发于 “偕臧的小站”,同步转载于此。
背景
实现原理提前需要理解 特殊成员函数、std::exchange() C++14
、std::swap()
、 std::move()
、constexpr
、explicit
、noexcept
等,若是遗忘可参考此文
- 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相关推荐
- C++智能指针shared_ptr、unique_ptr以及weak_ptr
目录 shared_ptr类 shared_ptr和unique_ptr都支持的操作 shared_ptr独有的操作 make_shared函数 shared_ptr自动销毁所管理的对象 由普通指针管 ...
- 智能指针shared_ptr、unique_ptr、weak_ptr
智能指针 智能指针解决的问题 智能指针分类 shared_ptr 内存模型图 shared_ptr示例 shared_ptr含义 shared_ptr基本用法及常用函数 常用函数 智能指针的构造,初始 ...
- 智能指针(shared_ptr、unique_ptr、weak_ptr)的使用
智能指针的使用 一.shared_ptr 1.创建一个shared_ptr 2.shared_ptr的常用成员函数 reset成员函数的使用 3.==注意事项== 二.unique_ptr 1.uni ...
- 学习笔记 | 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支持,并且第一个 ...
- C++ 使用智能指针shared_ptr/unique_ptr管理数组
目录 零.要管理的类 一.使用shared_ptr管理数组 二.使用unique_ptr管理数组 1.第一种方式 2.第二种方式 关于shared_ptr/unique_ptr的基础,我不在本篇博客中 ...
- 智能指针shared_ptr的用法
智能指针shared_ptr的用法 2016-12-03 15:39 by jiayayao, 360 阅读, 0 评论, 收藏, 编辑 为了解决C++内存泄漏的问题,C++11引入了智能指针(Sma ...
- 智能指针shared_ptr
如果有可能就使用unique_ptr,然后很多时候对象是需要共享的,因此shared_ptr也就会用得很多.shared_ptr允许多个指向同一个对象,当指向对象的最后一个shared_ptr销毁时, ...
- 智能指针shared_ptr的几个例子
#include <string> #include <iostream> #include <memory> //智能指针定义在头文件memory中,例如shar ...
- C++ 智能指针(二) std::unique_ptr
C++ STL智能指针系列: C++ 智能指针(一) std::auto_ptr C++ 智能指针(二) std::unique_ptr C++ 智能指针(三) std::shared_ptr C++ ...
- 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的一个偏 ...
最新文章
- eclipse 汉化教程(语言包)
- 12 FI配置-财务会计-分配会计核算原理至分类帐组
- ecshop插件_ECSHOP和SHOPEX快递单号查询中通快递插件V8.6专版
- NetDevOps常用数据库python实战-influxDB_grafana
- Introduction to Computer Networking学习笔记(一):网络层模型及IP header
- 游戏设计类毕业论文文献(推荐10篇)
- java 软考_关于软考
- 从产品经理到产品架构师
- 用 SIR 模型拟合疫情感染情况
- SVN分支合并冲突解决
- Xshell上传文件到Linux服务器上
- Dell EMC Isilon命令行方式添加一个接口到pool
- 如何学计算机打字,电脑如何快速学会打字
- 7-26 出生年 (15分)
- android 轮换实现动画,怎么在Android中实现一个首页无限轮播功能
- Javascript实现数字转中文大写
- 阿朱,是时候拥抱 Linux 了!
- C# 操作Excel单元格格式
- MFS-学习总结(基础概念)
- 2.利用计算机进行信息加工的一般过程是:,信息加工