设为首页 加入收藏

TOP

19.8.2 interface_cast_noaddref
2013-10-07 15:07:17 来源: 作者: 【 】 浏览:69
Tags:19.8.2 interface_cast_noaddref

19.8.2  interface_cast_noaddref

正如我们示例代码中展示的那样,有时候你只不过是想在某个接口上进行一次函数调用。这种情况下,大动干戈地写上8行代码似乎显得有点过于笨重了。因此,第二个接口强制,即interface_cast_noaddref应运而生。借助于该强制,刚才的示例可以瘦身为3行代码:

  1. IImpC *ic =  . . .;  
  2. BOOL  bOO;  
  3. interface_cast_noaddref<IImpCpp*>(ic)->CanSupportOO(&bOO); 

正如它的名字所暗示的那样,interface_cast_noaddref并不会在给定的接口上发起AddRef()调用。不过确切一点说,它其实在内部调用了QueryInterface()来获取IImpCpp接口,从而递增了COM对象的引用计数,只不过这种递增只是暂时的,在使用它的那行语句的结束点上,它还会自动释放先前获取的接口,这就意味着引用计数的递减。所以,从整体上来说使用interface_cast_noaddref就像其名字暗示的那样,对它所作用的COM对象上的引用计数没有任何影响。

由于该强制在单行语句中执行接口查询以及其上的方法调用,这么一来客户代码中就没有机会进行错误测试了,因此该强制选择当获取指定接口失败时抛出异常,缺省情况下抛出的异常是bad_interface_cast。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇19.8.3 interface_cast_test 下一篇19.8.1 interface_cast_addref

评论

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