将std :: unique_ptr与CComObject一起使用

时间:2014-08-21 15:13:04

标签: c++ c++11 com atl

我有一个带有接口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中的这些问题。有吗?

0 个答案:

没有答案