当前位置: 首页 > news >正文

C++:模拟实现shared_ptr

声明,本次实现的是简易版本,没有库里面这么复杂

目录

一.框架

二.构造函数

三.拷贝构造

四.拷贝赋值

五.运算符重载与析构函数

​编辑六.删除器的实现


一.框架

1.首先shared_ptr是一个类,带有一个模板参数,用于确定指针的类型

2.他有两个私有成员成员,一个是_ptr,存的是指针指向的地址,另一个是_pcount,用于判断有多少智能指针管理这同一块空间

namespace my
{template<class T>class shared_ptr{private:T* _ptr;int* _pcount;};}

二.构造函数

用传递过来的指针赋初始化_ptr,然后new 一个int大小的空间,初始化为1,代表现在只有这一个智能指针管理这一块空间

三.拷贝构造

拷贝构造时,就是将另一个智能指针的成员拷贝过来,然后++(*pcount)因为多了一个智能指针管理这个空间

四.拷贝赋值

看我上面的注释,不需要过多讲解了

五.运算符重载与析构函数


六.删除器的实现

指针可能指向一个数组,指向数组的时候就不能使用delete来释放动态开辟的资源,需要使用delete[],所以我们实现一个删除器,来解决这种情况

1.我们实现一个带模板参数的构造,参数类型期望传一个可调用对象进来,这样就可以控制,是使用delete还是delete[]

2.添加一个私有成员变量来接收这个可调用对象del,我们使用一个包装器来接收,返回值是void,参数只有一个T*(因为要释放的指针一定是T*类型的)

3.在release里使用删除器来删除_ptr

好了,现在删除器就完成了,可以控制delete和delete[]释放资源

http://www.dtcms.com/a/301698.html

相关文章:

  • day69—动态规划—爬楼梯(LeetCode-70)
  • LeetCode 刷题【16. 最接近的三数之和、17. 电话号码的字母组合】
  • 黑马程序员C++核心编程笔记--类和对象--运算符重载
  • 机器学习—线性回归
  • 深入解析MySQL索引页结构与B+Tree实现原理
  • ubuntu18.04解压大的tar.gz文件失败
  • 【Java系统接口幂等性解决实操】
  • java--WebSocket简单介绍
  • 2.安装CUDA详细步骤(含安装截图)
  • Dataloader的使用
  • 对抗攻击-知识点
  • HCIE学习之路:MSTP实现负载均衡实验
  • 全方位评测:11款主流指标平台优劣分析
  • [BSidesCF 2019]Kookie
  • 【测试报告】玄机抽奖系统(Java+Selenium+Jmeter自动化测试)
  • MyBatis-Plus 通用 Service(IService)详解与实战
  • Mybatis Plus 多数据源
  • 【LeetCode 热题 100】51. N 皇后——回溯
  • WiFi Mouse PC端 v1.7.2 官方中文版
  • GIF图像格式
  • 【RAG技术权威指南】从原理到企业级应用实践
  • Git Commit 生成与合入 Patch 指南
  • 《关于matplot中绘制图像中文字体乱码问题》
  • AWS免费套餐全面升级:企业降本增效与技术创新解决方案
  • 物联网发展:从概念到应用的演变历程
  • vue3报错:this.$refs.** undefined
  • 【INT范围提取字符串数字为正数】2022-8-29
  • Linux文件系统(三)
  • Java常用日志框架介绍
  • 【笔记】菲克定律与连续性方程详述