简单的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和多线程
前一篇文章写得实在太挫,重新来一篇. 多线程环境下生命周期的管理 多线程环境下,跨线程对象的生命周期管理会有什么挑战?我们拿生产者消费者模型来讨论这个问题. 实现一个简单的用于生产者消费者模型的队列 ...
随机推荐
- DataSet和List<T> 泛型之间互相转换 (转载, 作者写的很好)
/DataSet与泛型集合间的互相转换 //利用反射机制将DataTable的字段与自定义类型的公开属性互相赋值. //注意:从DataSet到IList<T>的转换,自定义类型的公开属性 ...
- UITableviewCell 重用内存
转载自:http://www.cnblogs.com/tangbinblog/p/3371545.html 重用实现分析 查看UITableView头文件,会找到NSMutableArray* vi ...
- HDU 1434 幸福列车(优先队列)
优先队列的应用 #include<iostream> #include<cstdio> #include<cstring> #include<queue> ...
- 转:web_custom_request 和 web_submit_data的差别
web_custom_request方法可以发送POST和GET类型的请求 web_submit_data只能发送POST类型的请求 所有web_submit_data方法发送的请求都可以使用web_ ...
- LoadRunner 录制cas 登陆脚本
关于CAS 的概念,见链接:http://www.360doc.com/content/15/0204/17/21706453_446251626.shtml 需要增加4个关联函数 //Correla ...
- Client与Server
监听套接字,通讯套接字,初始化网卡,多线程.想查自己的IP,ipconfig 服务端 #include "stdafx.h" #include <WinSock2.h> ...
- Python之路: socket篇
(默认)与特定的地址家族相关的协议,如果是 ,则系统就会根据地址格式和套接类别,自动选择一个合适的协议 sk import socketip_port = ()sk = socket.socket( ...
- c#获取新浪微博登录cookie
用新浪微博api收集数据有诸多限制,每小时只能调用官方api函数150次,认证也很麻烦.因此想通过爬网页的方式来收集数据.访问新浪微博用户网页首先需要登录,登录获取cookie后可直接获取网页数据,无 ...
- Delphi引用C对象文件(转)
源:http://blog.csdn.net/henreash/article/details/7357618 C语言应用非常广泛,并在世界各地拥有大量的代码库.这些代码库与Delphi的可比性较小, ...
- php 命名空间的目的
php引入命名空间的目的,就是为了防止不同的文件 标识符同名的问题,比如类.函数.变量同名导致冲突的问题.这才是根本的根本,了解指点,带着这个观念去学习php命名空间的相关知识,就不会云里雾里了,会比 ...