简单的shared_ptr实现
RT,代码参考了 STL(MSVC) 中shard_ptr的实现,基本原理是引用计数,利用Ref_cnt类来管理内存,在shared_ptr创建时创建,此后shared_ptr仅是在拷贝复制析构的过程中对引用进行修改,个人觉得比较有意思的一个地方在于通过对Ref_cnt类多态的应用使得shared_ptr无需额外增加模板参数这个想法(我原来想利用默认模板参数的方法感觉既不灵活又麻烦)。
https://github.com/Dadio44/Test/blob/master/Many_Test/Many_Test/Tshared_ptr.h
=====4月27号=============================================
看了effective c++ ,知道有了循环引用这种坑爹玩意,终于明白weak_ptr存在的意义,
为了弥补这个致命的漏洞,模仿msvc++的STL实现将Tshared_ptr的部分代码改成了个基类Ptr_base,这样weak_ptr就可以重用
部分代码,减小了代码重复,此外,因为看不懂STL中weak count 的作用,我就用了简单的想法去实现它(Tweak_ptr),可能会留下
什么隐患,但是无论如何它通过了我的测试
https://github.com/Dadio44/Test/blob/master/Many_Test/Many_Test/Tweak_ptr.h
=====4月30号=============================================
翻了下C++primer,看了weak_ptr那部分,发现接口中要求实现 lock() 与 expired() 两部分,
若weak_ptr所指对象存在,则返回true,否则返回false
lock 返回weak_ptr关联的shared_ptr,若shared_ptr不存在,则返回一个空的shared_ptr
weak count 的作用就是用来管理Ref_cnt_base对象,这保证了lock与expired的正确性
根本原理还是引用技术,顺便一提,添加了weak count 还是能通过 cyclic Reference 测试(废话
这是测试代码
https://github.com/Dadio44/Test/blob/master/Many_Test/Many_Test/TestTsamrt_prt.h
简单的shared_ptr实现的更多相关文章
- 实现一个简单的shared_ptr
翻看以前的代码的时候发现一个shared_ptr的简单实现. 我记得是网上的一篇例子(好像改了一点),但是又懒得找出处了 ╮(╯▽╰)╭. 觉得这份代码足以用来初步了解shared_ptr的实现了. ...
- shared_ptr / weak_ptr 代码片段
参考<<Boost程序库完全开放指南>> shared_ptr 类摘要(只列出了常用的部分)和相关说明 template <class T> class shar ...
- 智能指针 auto_ptr、scoped_ptr、shared_ptr、weak_ptr
什么是RAII? RAII是Resource Acquisition Is Initialization的简称,是C++语言的一种管理资源.避免泄漏的惯用法. RAII又叫做资源分配即初始化,即:定义 ...
- C++内存管理之shared_ptr
----------------------------------------shared_ptr--------------------------------------- 引子 c++中动态 ...
- auto_ptr和shared_ptr
<Effective C++>在资源管理一节提到了智能指针,智能指针中最著名的当属auto_ptr和shared_ptr.本文主要研究两者的实现. auto_ptr的实现: templat ...
- 异常处理与MiniDump详解(2) 智能指针与C++异常
write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 一. 综述 <异常处理与MiniDump详解(1) C++异常>稍 ...
- 使用TR1的智能指针
作为C++程序员,在没有智能指针,手动管理内存的蛮荒岁月里,可以说是暗无天日,痛苦异常.直到上帝说,还是要有光,于是智能指针进了标准.C++码农的日子总算好起来了. 虽然一直鄙视着没有显式指针的语言, ...
- shared_ptr的简单实现
前面讲到auto_ptr有个很大的缺陷就是所有权的转移,就是一个对象的内存块只能被一个智能指针对象所拥有.但我们有些时候希望共用那个内存块.于是C++ 11标准中有了shared_ptr这样的智能指针 ...
- shared_ptr和多线程
前一篇文章写得实在太挫,重新来一篇. 多线程环境下生命周期的管理 多线程环境下,跨线程对象的生命周期管理会有什么挑战?我们拿生产者消费者模型来讨论这个问题. 实现一个简单的用于生产者消费者模型的队列 ...
随机推荐
- 解读QML之二
QML文档 QML文档是用QML语法组成的字符串.一个文档定义了一个QML对象类型.文档以”.qml”最为后缀,可以保存在本地和网络上,可以使用代码生成.一 个在文档中定义的对象类型的实例,也可以使用 ...
- 内联元素的特点SPAN
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- mysql Explain 性能分析关键字
EXPLAIN 输出格式select_typetabletypepossible_keyskeykey_lenrowsExtra MySQL 提供了一个 EXPLAIN 命令, 它可以对 SELECT ...
- 线段树扫描线 HDU 1542
n个矩形 问他们覆盖的面积重复的就算一次 x数组存线段 然后根据横坐标排一下 z 线段树 l - r 就是1 ~ 2*n #include<stdio.h> #include< ...
- IDEA github的应用
1.下载并安装一个git 一直点下一步就可以 2.去github官网注册一个账号 https://github.com/ 2.1点击Sign up 进入注册页面 2.2填写注册信息,点击Create ...
- Chapter 1 First Sight——3
Flying doesn't bother me; the hour in the car with Charlie, though, I was a little worried about. 坐飞 ...
- PAT (Advanced Level) 1082. Read Number in Chinese (25)
模拟题. #include<cstdio> #include<cstring> #include<cmath> #include<vector> #in ...
- [转] spring事务管理几种方式
前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ...
- Hibernate-----关系映射 重点!!!
1. 关系, 指的是对象之间的关系, 并不是数据库之间的关系. 2. 简化问题: a) 怎么写annotation b) 增删改查CRUD怎么写 对象处于下列关系之一 (一对一, 一对多, 多对多)时 ...
- 如何获取app的素材,做出一个高仿的app
第一步:在iTunes中搜索你想要的app,然后点击下载: 下载完成之后右键点击:在Finder中显示 在finder中右键用"归档工具打开" 会显示如下内容: "显示包 ...