我可以在std :: map中使用CComPtr吗?

时间:2012-04-17 18:45:32

标签: c++ windows com atl smart-pointers

我正在用C ++编写Windows COM程序,我正在使用CComPtr作为智能指针。

我找不到答案的问题是 - 我可以在CComPtr内使用std::map

我有以下代码片段(简化):

std::map<int, CComPtr<IErrorInfo> > ErrorMap;

我希望在intIErrorInfo错误信息之间保持这种映射。

但是我不确定我是否可以执行以下操作:

CComPtr<IErrorInfo> result;
GetErrorInfo(0, &pErrInfo);

ErrorMap.insert(std::make_pair(0, result));

我担心result智能指针的所有权以及ErrorMap被销毁后是否会正确释放?

1 个答案:

答案 0 :(得分:4)

您需要将您的CComPtr包装在CAdapt中才能使其正常工作。

  

适配器类CAdapt很有用,因为很多容器类   (如STL容器类)期望能够获得   使用address-of运算符的包含对象的地址。   重新定义运营商地址可能会使这一点变得混乱   要求,通常会导致编译错误并阻止   将unadapted类型与该容器一起使用。 CAdapt提供了一种方式   围绕这些问题。