4

我正在用 C++ 在 Windows COM 中编写一个程序,并且正在使用CComPtr智能指针。

我找不到答案的问题是 - 我可以CComPtrstd::map.

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

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

我希望维护ints 和IErrorInfo错误信息之间的这种映射。

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

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

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

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

4

1 回答 1

5

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

适配器类 CAdapt 很有用,因为许多容器类(例如 STL 容器类)希望能够使用 address-of 运算符获取它们所包含对象的地址。重新定义地址运算符可能会混淆此要求,通常会导致编译错误并阻止在该容器中使用未适配的类型。CAdapt 提供了解决这些问题的方法。

于 2012-04-17T18:54:58.087 回答