C++ 将std::unique_ptr与ccombject一起使用

C++ 将std::unique_ptr与ccombject一起使用,c++,c++11,com,atl,C++,C++11,Com,Atl,我有一个ATL COM对象CFoo,带有接口IFoo,我使用COM工厂创建该对象的实例,如下所示: CComObject<CFoo>* ret; HRESULT hr; if (FAILED(hr = CComObject<CFoo>::CreateInstance(&ret)){ return hr; } 当然,这意味着ret_g将拥有指针。然后,从记忆的角度来看,我是安全的。但是,如果我设法返回IFoo,那么我需要记住返回所有权,因为std::uni

我有一个ATL COM对象
CFoo
,带有接口
IFoo
,我使用COM工厂创建该对象的实例,如下所示:

CComObject<CFoo>* ret;
HRESULT hr;
if (FAILED(hr = CComObject<CFoo>::CreateInstance(&ret)){
    return hr;
}
当然,这意味着
ret_g
将拥有指针。然后,从记忆的角度来看,我是安全的。但是,如果我设法返回
IFoo
,那么我需要记住返回所有权,因为
std::unique_ptr
析构函数将删除我的对象(我可以通过调用
ret\u g.release()
来实现这一点


ATL是在C++11之前设计的。这让我觉得有更好的方法来解决ATL中已经内置的这些问题。有吗?

更好的方法是使用为ATL设计的东西。使用
CComPtr
。我认为你的
独特的\u ptr
解决方案不起作用,因为你需要
ret->Release()
(或类似的东西)被调用,而不是
delete ret
,这正是
unique\u ptr
将要做的。这个博客可能会解决您的问题:为什么不使用专为此设计的
CComPtr
std::unique_ptr<CComObject<CFoo>> ret_g(ret);