2012-04-17 66 views
3

我正在用C++編寫Windows COM中的程序,並且我正在使用CComPtr作爲智能指針。我可以在std :: map中使用CComPtr嗎?

我無法找到答案的問題是 - 我可以在std::map內使用CComPtr

我有以下代碼片段(簡化):

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

我希望保持int S和IErrorInfo錯誤的相關信息之間這種映射。

但是我不知道如果我能做到以下幾點:

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

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

我關心的result智能指針的所有權,是否會得到正確釋放時ErrorMap被破壞?

回答

4

您需要將您的CComPtr包裝在CAdapt中才能使用。因爲許多容器類 (如STL容器類)希望能夠使用地址的操作者,以獲得它們所包含的對象的地址

的適配器類CAdapt是有用的。 重新定義操作符的地址可能會影響此需求,通常會導致編譯錯誤並阻止將未使用的適配器類型與該容器一起使用。 CAdapt針對這些問題提供了一種方式 。

+1

在C++ 11中,您不應該這樣做,因爲CopyConstructible需求不再需要'operator&'以正常方式工作。 – 2012-04-17 19:44:55

相關問題