如何理解下面这句话---
“CComPtr与_com_ptr_t模板类似。但是,CComPtr用于ATL内部,因为它不抛出任何异常。”“不抛出任何异常”--是什么意思? 是好还是坏?
是使用能抛异常的_com_ptr_t,还是使用不能抛异常的CComPtr?

解决方案 »

  1.   

    “不抛出任何异常”就是不抛出任何异常。是好的,因为ATL的设计原则是希望生成的东西尽量小,尽量不依赖其它类库,包括C++运行时库。 而使用异常是要求C++运行时库的。所以ATL的类都不抛出异常。
      

  2.   

    samsun2000:
    那是不是说,在创建组件时就不要使用类似_com_ptr_t这样的抛出异常的模板(如:_bstr_t, _variant_t)?
      

  3.   

    在创建组件的时候还是使用_com_ptr_t
    在COM内部使用的时候用CComPtr
      

  4.   

    那就看具体情况了。如果在ATL程序里创建,为了避免异常机制,建议不用_com_ptr_t,包括_bstr_t, _variant_t。如果在其他情况下,比如MFC,STL,不忌讳使用异常机制的环境中,就用_com_ptr_t这些好了