CComPtr和CComQIPtr
CComPtr和CComQIPtr是智能接口指针类,它们在销毁的时候,不需要手动去释放接口指针,在赋值的时候,也不需要手动的AddRef,在出现异常的时候,会自动处理异常,而不需要额外的异常处理代码。
CComPtr和CComQIPtr的不同的地方:CComPtr只能创建固定的特定的接口指针实例。而CComQIPtr不但实现了CComPtr的所有的功能,而且当我们把一个不同类型的接口指针赋值给CComQIPtr的时候,CComQIPtr会自动的调用接口指针的QueryInterface接口,来获得对应的正确的接口指针。
(1) 构造函数
第一个参数为智能接口指针的类型,第二个参数为 智能指针的接口ID。
CComPtr<IUnknown> punk;
//下面三个例子完全相同
CComPtr<IXXX> pno;
CComPtr<IXXX,&__uuidof(IXXX)> pno;
CComPtr<IXXX,&IID_IXXX> pno;
CComQIPtr可以用任何一个类型的接口指针初始化,如果初始化的值与CComQIPtr的类型相同,那么构造函数简单调用 指针的AddRef,但是,如果类型不同的话,它会先调用指针的QueryInterface来获得相同的类型的接口指针,当QueryInterface失败的话,内部指针会被设置为NULL。
所有下面的代码,可以用来检测是否转换成功:
(2)赋值
赋值的时候,发生下面三件事:<