我有一个带有接口CFoo
的ATL COM对象IFoo
,我使用COM工厂创建一个这样的实例,如下所示:
CComObject<CFoo>* ret;
HRESULT hr;
if (FAILED(hr = CComObject<CFoo>::CreateInstance(&ret)){
return hr;
}
在此之后,一些样板代码紧随其后,基本上,我尝试获取IFoo
接口并返回该接口。关键是,除非我小心,否则如果任何样板代码抛出异常,我怀疑我会泄漏CComObject<CFoo>
实例。
所以我想在上面的代码之后写作,
std::unique_ptr<CComObject<CFoo>> ret_g(ret);
当然,这意味着ret_g
将拥有指针。然后,从记忆的角度来看,我是安全的。但是,如果我设法返回IFoo
,我需要记得给予所有权,因为std::unique_ptr
析构函数将删除我的对象。 轰!(我可以通过拨打ret_g.release()
来实现这一点。
ATL是在C ++ 11之前设计的。这让我觉得有更好的方法来解决已经内置到ATL中的这些问题。有吗?