首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

小弟我的POCO C++库学习 - 内存管理 (二)

2013-03-06 
我的POCO C++库学习 -- 内存管理 (二)我的POCO C库学习 -- 内存管理 (二)3. SharedPtrSharedPtr是Poco库中

我的POCO C++库学习 -- 内存管理 (二)
我的POCO C++库学习 -- 内存管理 (二)


3. SharedPtr

        SharedPtr是Poco库中基于引用计数实现的另外一种智能指针。同AutoPtr相比,Poco::SharedPtr主要用于为没有实现引用计数功能的类(换句话说,也就是该类本身不是引用计数对象)提供引用计数服务,实现动态地址的自动回收。

        可以这么说,Poco::AutoPtr是使用继承关系来实现的智能指针,而Poco::SharedPtr是聚合方法实现的智能指针。

3.1 SharedPtr的类图

         首先来看一下SharedPtr的类图:

小弟我的POCO C++库学习 - 内存管理 (二)

        从类图中可以看到SharedPtr是对引用计数和原生指针封装。其中有成员指针_ptr,指向任意类型的C;同时还存在一个引用计数对象的指针_pCounter,指向任意一个实现了引用计数的类。当然在Poco库中提供了ReferenceCount的默认实现,类ReferenceCounter。

        比较类ReferenceCounter和AutoPtr中依赖的类RefCountedObject,可以发现其实现相同,本质上就是一个东西。Poco库中之所以把两者分开,我想是为了明确的表示类与类之间的关系。ReferenceCounter用于组合,而RefCountedObject用于继承。

        SharedPtr在实现模板的时候,还预留了RP参数,这是一个释放策略,用于调整SharedPtr在释放数组和单个对象之间不同策略的转换。

template <class C>class ArrayReleasePolicy{public:static void release(C* pObj)/// Delete the object./// Note that pObj can be 0.{delete [] pObj;}};char* pStr = new char[100];SharedPtr<char, Poco::ReferenceCounter, ArrayReleasePolicy> p(pStr);

3.6 其他

      同boost库比较的话,Poco中的SharedPtr同boost库中的shared_ptr可以说是类似的,行为上相似,虽然实现不同。


(版权所有,转载时请注明作者和出处)

热点排行