博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
shared_ptr简单实现
阅读量:4114 次
发布时间:2019-05-25

本文共 1344 字,大约阅读时间需要 4 分钟。

翻看以前的代码的时候发现一个shared_ptr的简单实现。

我记得是网上的一篇例子(好像改了一点),但是又懒得找出处了 ╮(╯▽╰)╭。

觉得这份代码足以用来初步了解shared_ptr的实现了。

 

一般来说,智能指针的实现需要以下步骤:

1.一个模板指针T* ptr,指向实际的对象。

2.一个引用次数(必须new出来的,不然会多个shared_ptr里面会有不同的引用次数而导致多次delete)。

3.重载operator*和operator->,使得能像指针一样使用shared_ptr。

4.重载copy constructor,使其引用次数加一。

5.重载operator=,如果原来的shared_ptr已经有对象,则让其引用次数减一并判断引用是否为零(是否调用delete)。

 然后将新的对象引用次数加一。

6.重载析构函数,使引用次数减一并判断引用是否为零(是否调用delete)。

 

源码如下:

1 #ifndef __SHARED_PTR_ 2 #define __SHARED_PTR_ 3  4 template 
5 class shared_ptr { 6 public: 7 shared_ptr(T* p) : count(new int(1)), _ptr(p) {} 8 shared_ptr(shared_ptr
& other) : count(&(++*other.count)), _ptr(other._ptr) {} 9 T* operator->() { return _ptr; }10 T& operator*() { return *_ptr; }11 shared_ptr
& operator=(shared_ptr
& other)12 {13 ++*other.count;14 if (this->_ptr && 0 == --*this->count)15 {16 delete count;17 delete _ptr;18 }19 this->_ptr = other._ptr;20 this->count = other.count;21 return *this;22 }23 ~shared_ptr()24 {25 if (--*count == 0)26 {27 delete count;28 delete _ptr;29 }30 }31 int getRef() { return *count; }32 private:33 int* count;34 T* _ptr;35 };36 37 38 #endif

转载地址:http://nlgsi.baihongyu.com/

你可能感兴趣的文章
NEXO代币持有者获得20,428,359.89美元股息
查看>>
Piper Sandler为EverArc收购Perimeter Solutions提供咨询服务
查看>>
RMRK筹集600万美元,用于在Polkadot上建立先进的NFT系统标准
查看>>
JavaSE_day12 集合
查看>>
JavaSE_day14 集合中的Map集合_键值映射关系
查看>>
Day_15JavaSE 异常
查看>>
异常 Java学习Day_15
查看>>
JavaSE_day_03 方法
查看>>
day-03JavaSE_循环
查看>>
Mysql初始化的命令
查看>>
day_21_0817_Mysql
查看>>
day-22 mysql_SQL 结构化查询语言
查看>>
MySQL关键字的些许问题
查看>>
浅谈HTML
查看>>
css基础
查看>>
HTML&CSS进阶
查看>>
Servlet进阶和JSP基础
查看>>
servlet中的cookie和session
查看>>
过滤器及JSP九大隐式对象
查看>>
软件(项目)的分层
查看>>