C++ 将std::unique_ptr与ccombject一起使用
我有一个ATL COM对象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
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);