设为首页 加入收藏

TOP

19.8.5 保护引用计数
2013-10-07 15:07:03 来源: 作者: 【 】 浏览:75
Tags:19.8.5 保护 引用 计数

19.8.5  保护引用计数

你可能已经注意到,interface_cast_noaddref返回的"指向用户请求的接口的指针"类型为protected_pointer_type。这是被用来防止客户端代码对一个接口的AddRef()或Release()进行"病态的"调用的。由于该强制会负责管理相应接口的生命期,所以客户代码不用越俎代庖。protected_pointer_type是基于protect_refcount模板来定义的, 后者看起来像这样:

程序清单19.18

  1. template <typename I> 
  2. interface protect_refcount  
  3.     : public I  
  4. {  
  5. private:  
  6.   STDMETHOD_(ULONG, AddRef)()  
  7.   {  
  8.     I   *pi = static_cast<I*>(this);  
  9.     return pi->AddRef();  
  10.   }  
  11.   STDMETHOD_(ULONG, Release)()  
  12.   {  
  13.     I   *pi = static_cast<I*>(this);  
  14.     return pi->Release();  
  15.   }  
  16. };  

protect_refcount中的两个方法对于interface_cast_noaddref的客户代码来说是不可访问的,而其他接口相关的方法则仍然可以访问。
  1. interface_cast_noaddref<IX>(py)->Release(); // 编译错误! 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇19.8.7 IID_traits 下一篇19.10 强制:尾声

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: