2012-04-17 9 views
3

私はC++でWindows COMにプログラムを書いていますが、スマートポインタにはCComPtrを使用しています。std :: mapの内部でCComPtrを使用できますか?

答えが見つからない質問はをstd::mapの中に入れてもいいですか?

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

私はintIErrorInfo s及びエラーに関する情報との間のこのマッピングを維持したい:

Iは、次のコード断片(簡略化)を有します。

しかし、私は、私は次の操作を行うことができるかどうかわからない:

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

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

私はresultスマートポインタの所有権を懸念だとErrorMapが破壊ますとき、それは正しく解放れますか?

答えて

4

これを行うには、CComPtrをCAdaptにラップする必要があります。 (例えば、STLコンテナクラスなど) 期待多くのコンテナクラスは、アドレスのオペレータを使用して含まれているオブジェクトの アドレスを取得できるようにするため

アダプタクラスCAdaptは有用です。 アドレス演算子の再定義は、この 要件を混乱させる可能性があり、通常はコンパイルエラーの原因となり、そのコンテナで未対応の型の使用が妨げられます。 CAdaptはこれらの問題を回避する方法を提供します。

+1

CopyConstructibleの要件では、もはや 'operator&'は通常の方法で動作する必要がないので、これを行う必要はありません。 –

関連する問題