C++深度探索系列:智能指针(Smart Pointer) [二]

本文深入探讨C++智能指针的设计策略,包括如何通过引用计数管理和线程安全策略增强智能指针的功能。文章介绍了两种支持引用计数的智能指针实现方式,并讨论了在多线程环境下确保线程安全的解决方案。此外,还提及了智能指针在处理多种资源和子类化方面的挑战。
摘要由CSDN通过智能技术生成

                                           深度探索智能指针(Smart Pointer)

主题索引:

一、剖析C++标准库智能指针(std::auto_ptr)
   
    1.Do you Smart Pointer?
    2.std::auto_ptr的设计原理
    3.std::auto_ptr高级使用指南
    4.你是否觉得std::auto_ptr还不够完美?

二、C++条件,寻找构造更强大的智能指针(Smart Pointer)的
    策略
   
    1.支持引用记数的多种设计策略
    2.支持处理多种资源
    3.支持Subclassing
    4.支持多线程条件下,线程安全的多种设计策略
    5.其它多种特殊要求下,再构造

三、Generic Programming基础技术和Smart Pointer
    1.回首处理资源中的Traits技术
    2.回首多线程支持的设计


四、COM实现中,Smart Pointer设计原理


五、著名C++库(标准和非标准)中的Smart Pointer现状

---------------------------------------------------------------------

二、C++条件,寻找构造更强大的智能指针(SmartPointer)的策略  
    
              
    
    1.支持引用记数的多种设计策略
     
      你听说过COM和它著名的IUnknown接口吧?
      IUnknown是干什么的?我要告诉你,IUnknown接口三个函数签名中,
      两个是用来管理对象(CoClass Object,组件类对象)的记数来控制
      它的生命周期的.
 
      在实践中,我们的对象并不是只用一次,只允许一个引用的.

      那么,谁来管理它的生命周期呢?
     
      我们的策略是:引用记数. 当对象的引用记数为零时,就销毁对象.
      在没有托管环境的情况下,事实上,销毁对象的往往还是auto_ptr.
      而COM中,销毁对象的是对象自己.
     
      事实上,它和我们的智能指针不是一个级别上的概念.
      我们的智能指针负责的是对象级的引用.而COM是以接口引用为
      核心的.保证接口操作时,接口引用记数的自动管理.
 
      哦!是的!那么我们怎样给auto_ptr加上对象引用记数的功能?

      策略1:
        
         一个对象对应一个引用记数对象.
         智能指针以记数对象为代理.
         想象,这又归到经典的"添加中间层"解决方案上了.
         
         # 核心一:
          
         我们添加一个 "引用记数class".
         它的职责有二:
            a.维护对象的引用记数.
            b.维护对象的指针.
        
         结构示意如下:
         template<class T>
         class ObjRefCounted{
         private:
             T* m_OBJ_Delegate_Ptr;
             unsigned int m_UIcounted;
         public:
      explicit ObjRefCounted(T* m_Paramin = 0):
             m_UIcounted(1), m_OBJ_Delegate_Ptr(m_Paramin){};   
   
      template<class M> ObjRefCounted(ObjRefCounted<M>& x) {

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值