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

4

我正在使用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 被销毁时,它是否会被正确释放?

1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
5

为使此功能正常工作,您需要在CAdapt中包装您的CComPtr。

CAdapt适配器类非常有用,因为许多容器类(如STL容器类)希望能够使用地址运算符获取其包含对象的地址。地址运算符的重新定义可能会使这个要求混淆,通常导致编译错误并阻止使用未经调整的类型与该容器一起使用。 CAdapt提供了解决这些问题的方法。


1
在C++11中,您不必这样做,因为CopyConstructible要求不再要求operator&以正常方式工作。 - Alan Stokes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,