c++ 实现简单的智能指针

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

 

posted @ 2017-01-16 01:40  小雨滔滔  阅读(952)  评论(0编辑  收藏  举报