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