4

私は C++ の Windows COM でプログラムを作成しておりCComPtr、スマート ポインターに使用しています。

答えが見つからない質問CComPtrは、.内で使用できますかstd::map.

次のコードフラグメントがあります(簡略化):

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

ints とIErrorInfoエラー情報の間でこのマッピングを維持したいと考えています。

ただし、次のことができるかどうかはわかりません。

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

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

スマート ポインターの所有権について心配しています。破棄resultされたときに正しく解放されるかどうか。ErrorMap

4

1 に答える 1

5

これを機能させるには、 CComPtrをCAdaptでラップする必要があります。

多くのコンテナクラス(STLコンテナクラスなど)は、address-of演算子を使用して、含まれているオブジェクトのアドレスを取得できることを期待しているため、アダプタクラスCAdaptは便利です。address-of演算子を再定義すると、この要件が混乱する可能性があり、通常はコンパイルエラーが発生し、そのコンテナーでの非適応型の使用が妨げられます。CAdaptは、これらの問題を回避する方法を提供します。

于 2012-04-17T18:54:58.087 に答える