我正在用C ++编写Windows COM程序,我正在使用CComPtr
作为智能指针。
我找不到答案的问题是 - 我可以在CComPtr
内使用std::map
。
我有以下代码片段(简化):
std::map<int, CComPtr<IErrorInfo> > ErrorMap;
我希望在int
和IErrorInfo
错误信息之间保持这种映射。
但是我不确定我是否可以执行以下操作:
CComPtr<IErrorInfo> result;
GetErrorInfo(0, &pErrInfo);
ErrorMap.insert(std::make_pair(0, result));
我担心result
智能指针的所有权以及ErrorMap
被销毁后是否会正确释放?
答案 0 :(得分:4)
您需要将您的CComPtr包装在CAdapt中才能使其正常工作。
适配器类CAdapt很有用,因为很多容器类 (如STL容器类)期望能够获得 使用address-of运算符的包含对象的地址。 重新定义运营商地址可能会使这一点变得混乱 要求,通常会导致编译错误并阻止 将unadapted类型与该容器一起使用。 CAdapt提供了一种方式 围绕这些问题。