ACE学习手记-----智能指针(ACE_Intrusive_Auto_Ptr)

来源:互联网 发布:网络安全工程师好学吗 编辑:程序博客网 时间:2024/05/20 02:28

 前面一篇写了智能指针,重点介绍了ACE_Auto_Ptr<X>和ACE_Refcounted_Auto_Ptr<X> 两个智能指针的使用,以及他们的不同点。当时对ACE_Intrusive_Auto_Ptr<X>指针还没有深入的了解、也不知道ACE_Intrusive_Auto_Ptr<X>智能指针的用途是什么?

 

 

ACE_Intrusive_Auto_Ptr<X>和ACE_Refcounted_Auto_Ptr<X> 有点类似,都是基于引用计数的。也会实现X对象的自动删除释放功能。大体他们2个类实现的功能,从我们使用的角度来说应该是一样的、从表面上看确实是一样,在使用过程中没有多大的区别。

 

ACE_Intrusive_Auto_Ptr<X>与ACE_Refcounted_Auto_Ptr<X> 唯一不同的地方在于引用计数的方式:

ACE_Refcounted_Auto_Ptr<X>  是由 ACE_Refcounted_Auto_Ptr<X> 自己来实现引用计数、管理X对象的生命期。

ACE_Intrusive_Auto_Ptr<X> 并不是由自己实现引用计数,而是由由X对象自己实现引用技术,自己来管理X对象的生命期。但是X类需要提供intrusive_add_ref和intrusive_remove_ref两个静态函数来增加和减少X对象的引用技术。

 

 

何时使用ACE_Intrusive_Auto_Ptr<X>或者ACE_Refcounted_Auto_Ptr<X> 来管理X对象的指针。我想这个应该没有一个统一的规律。关键还是要根据程序因地制宜。一般情况下我们会优先选择ACE_Refcounted_Auto_Ptr<X> ,因为使用起来简单,我们只需要关注X对象的业务上面的实现,而不用去管理实现X对象的生命期。既然ACE_Refcounted_Auto_Ptr<X> 已经功能这么强大而且满足我们的需求了,那么我们为什么还需要ACE_Intrusive_Auto_Ptr<X>它呢?因为ACE_Intrusive_Auto_Ptr<X>能够让我们提供更加细粒度的管理X对象指针的能力。很多情况下ACE_Refcounted_Auto_Ptr<X> 都是在引用技术为0的时候直接删除X对象。而是使用了ACE_Intrusive_Auto_Ptr<X>以后,在X对象引用技术为0的时候,如何处理对象,那就是我们能够控制的能力了。

 

总结:ACE_Intrusive_Auto_Ptr<X>使用起来虽然复杂一些,但是他能够提供更加透明的、细粒度的X对象生命期的控制能力。

           ACE_Refcounted_Auto_Ptr<X> 使用简单,对X对象的控制能力我们无需干涉、也无法干涉,除非你自己去修改ACE源码。