ComPtr クラス
テンプレート パラメーターで指定されたインターフェイスを表す スマート ポインター 型を作成します。 ComPtr
は、基になるインターフェイス ポインターの参照カウントを維持し、参照カウントがゼロになるとそのインターフェイスを自動的に解放します。
template <typename T>
class ComPtr;
template<class U>
friend class ComPtr;
T
ComPtr
が表すインターフェイス。
U
現在の ComPtr
がフレンドであるクラス。 (このパラメーターを使用するテンプレートは保護されています)。
ComPtr<>
は、基になるインターフェイス ポインターを表す型を宣言します。 ComPtr<>
を使用して変数を宣言してから、矢印のメンバー アクセス演算子 (->
) を使用してインターフェイス メンバー関数にアクセスします。
スマート ポインターの詳細については、COM コーディングの実践に関する記事で「COM スマート ポインター」のサブセクションをご覧ください。
名前 | 説明 |
---|---|
InterfaceType |
T テンプレート パラメーターで指定された型のシノニム。 |
名前 | 説明 |
---|---|
ComPtr::ComPtr |
ComPtr クラスの新しいインスタンスを初期化します。 オーバーロードは、既定、コピー、移動、および変換の各コンストラクターを提供します。 |
ComPtr::~ComPtr |
ComPtr のインスタンスを初期化解除します。 |
名前 | 説明 |
---|---|
ComPtr::As |
指定されたテンプレート パラメーターで識別されるインターフェイスを表す ComPtr オブジェクトを返します。 |
ComPtr::AsIID |
指定されたインターフェイス ID で識別されるインターフェイスを表す ComPtr オブジェクトを返します。 |
ComPtr::AsWeak |
現在のオブジェクトへの弱い参照を取得します。 |
ComPtr::Attach |
この ComPtr と、現在のテンプレート型パラメーターで指定されたインターフェイスの種類を関連付けます。 |
ComPtr::CopyTo |
この ComPtr に関連付けられた現在のまたは指定されたインターフェイスを、指定された出力ポインターにコピーします。 |
ComPtr::Detach |
この ComPtr が表すインターフェイスからその関連付けを解除します。 |
ComPtr::Get |
この ComPtr に関連付けられたインターフェイスへのポインターを取得します。 |
ComPtr::GetAddressOf |
このComPtr によって表されるインターフェイスへのポインターを含む、ptr_ データ メンバーのアドレスを取得します。 |
ComPtr::ReleaseAndGetAddressOf |
この ComPtr に関連付けられているインターフェイスを解放し、解放されたインターフェイスへのポインターを含む ptr_ データ メンバーのアドレスを取得します。 |
ComPtr::Reset |
この ComPtr に関連付けられているインターフェイスを解放し、新しい参照カウントを返します。 |
ComPtr::Swap |
指定された ComPtr によって管理されているインターフェイスと現在の ComPtr によって管理されるインターフェイスを交換します。 |
名前 | 説明 |
---|---|
ComPtr::InternalAddRef |
この ComPtr に関連付けられたインターフェイスの参照カウントをインクリメントします。 |
ComPtr::InternalRelease |
この ComPtr に関連付けられたインターフェイスに対して COM 解放操作を実行します。 |
名前 | 説明 |
---|---|
ComPtr::operator& |
現在の ComPtr のアドレスを取得します。 |
ComPtr::operator-> |
現在のテンプレート パラメーターで指定された型へのポインターを取得します。 |
ComPtr::operator= |
値を現在の ComPtr に割り当てます。 |
ComPtr::operator== |
2 つの ComPtr オブジェクトが等しいかどうかを示します。 |
ComPtr::operator!= |
2 つの ComPtr オブジェクトが等しくないかどうかを示します。 |
ComPtr::operator Microsoft::WRL::Details::BoolType |
ComPtr でインターフェイスのオブジェクトの有効期間が管理されているかどうかを示します。 |
名前 | 説明 |
---|---|
ComPtr::ptr_ |
この ComPtr に関連付けられ、管理されているインターフェイスへのポインターが含まれています。 |
ComPtr
ヘッダー: client.h
名前空間: Microsoft::WRL
ComPtr
のインスタンスを初期化解除します。
WRL_NOTHROW ~ComPtr();
指定されたテンプレート パラメーターで識別されるインターフェイスを表す ComPtr
オブジェクトを返します。
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* p
) const;
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> p
) const;
U
パラメーター p
で表されるインターフェイス。
p
パラメーター U
で指定されたインターフェイスを表すComPtr
オブジェクト。 パラメーター p
は、現在の ComPtr
オブジェクトを参照してはなりません。
最初のテンプレートは、コードで使用する必要があるフォームです。 2 つ目のテンプレートは、内部のヘルパーの特殊化です。 auto
型推論キーワードなどの C++ 言語機能をサポートしています。
S_OK
成功した場合。それ以外の場合は、エラーを示す HRESULT
。
指定されたインターフェイス ID で識別されるインターフェイスを表す ComPtr
オブジェクトを返します。
WRL_NOTHROW HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IUnknown>* p
) const;
riid
インターフェイス ID。
p
ID が riid
であるインターフェイスがオブジェクトにある場合は、 riid
パラメーターで指定されたインターフェイスへの二重間接ポインター。 それ以外の場合は、IUnknown
へのポインター。
S_OK
成功した場合。それ以外の場合は、エラーを示す HRESULT
。
現在のオブジェクトへの弱い参照を取得します。
HRESULT AsWeak(
_Out_ WeakRef* pWeakRef
);
pWeakRef
この操作が完了した場合は、弱い参照オブジェクトへのポインター。
成功した場合は S_OK、そうでない場合はエラーを示す HRESULT。
この ComPtr
と、現在のテンプレート型パラメーターで指定されたインターフェイスの種類を関連付けます。
void Attach(
_In_opt_ InterfaceType* other
);
other
インターフェイスの型。
ComPtr
クラスの新しいインスタンスを初期化します。 オーバーロードは、既定、コピー、移動、および変換の各コンストラクターを提供します。
WRL_NOTHROW ComPtr();
WRL_NOTHROW ComPtr(
decltype(__nullptr)
);
template<class U>
WRL_NOTHROW ComPtr(
_In_opt_ U *other
);
WRL_NOTHROW ComPtr(
const ComPtr& other
);
template<class U>
WRL_NOTHROW ComPtr(
const ComPtr<U> &other,
typename ENABLE_IF<__is_convertible_to(U*, T*), void *>
);
WRL_NOTHROW ComPtr(
_Inout_ ComPtr &&other
);
template<class U>
WRL_NOTHROW ComPtr(
_Inout_ ComPtr<U>&& other, typename ENABLE_IF<__is_convertible_to(U*, T*), void *>
);
U
other
パラメーターの型。
other
U
型オブジェクト。
最初のコンストラクターは、空のオブジェクトを暗黙的に作成する既定のコンストラクターです。 2 番目のコンストラクターは、空のオブジェクトを明示的に作成する __nullptr
を指定します。
3 番目のコンストラクターは、ポインターによって指定されたオブジェクトからオブジェクトを作成します。 ComPtr
は、ポイント先のメモリを所有し、それに対する参照カウントを保持するようになりました。
4 番目と 5 番目のコンストラクターはコピー コンストラクターです。 5 番目のコンストラクターは、オブジェクトを現在の型に変換可能な場合、このオブジェクトをコピーします。
6 番目と 7 番目のコンストラクターは移動コンストラクターです。 7 番目のコンストラクターは、オブジェクトを現在の型に変換可能な場合、このオブジェクトを移動します。
この ComPtr
に関連付けられた現在のまたは指定されたインターフェイスを、指定されたポインターにコピーします。
HRESULT CopyTo(
_Deref_out_ InterfaceType** ptr
);
HRESULT CopyTo(
REFIID riid,
_Deref_out_ void** ptr
) const;
template<typename U>
HRESULT CopyTo(
_Deref_out_ U** ptr
) const;
U
型の名前。
ptr
この操作が完了した場合は要求されたインターフェイスへのポインター。
riid
インターフェイス ID。
S_OK
成功した場合。それ以外の場合は、暗黙的なQueryInterface
操作が失敗した理由を示すHRESULT
。
最初の関数は、この ComPtr
に関連付けられているインターフェイスへのポインターのコピーを返します。 この関数は常に S_OK
を返します。
2 番目の関数は、riid
パラメーターで指定されたインターフェイスに対して、このComPtr
に関連付けられているインターフェイスに対してQueryInterface
操作を実行します。
3 番目の関数は、U
パラメーターの基になるインターフェイスに対して、このComPtr
に関連付けられているインターフェイスに対してQueryInterface
操作を実行します。
この ComPtr
が表すインターフェイスからその関連付けを解除します。
T* Detach();
この ComPtr
オブジェクトによって表されたインターフェイスへのポインター。
この ComPtr
に関連付けられたインターフェイスへのポインターを取得します。
T* Get() const;
この ComPtr
に関連付けられたインターフェイスへのポインター。
このComPtr
によって表されるインターフェイスへのポインターを含む、ptr_
データ メンバーのアドレスを取得します。
T* const* GetAddressOf() const;
T** GetAddressOf();
変数のアドレス。
この ComPtr
に関連付けられたインターフェイスの参照カウントをインクリメントします。
void InternalAddRef() const;
このメソッドは保護されています。
この ComPtr
に関連付けられたインターフェイスに対して COM 解放操作を実行します。
unsigned long InternalRelease();
このメソッドは保護されています。
この ComPtr
オブジェクトに関連付けられているインターフェイスを解放し、ComPtr
オブジェクトのアドレスを取得します。
Details::ComPtrRef<WeakRef> operator&()
const Details::ComPtrRef<const WeakRef> operator&() const
現在の ComPtr
への弱い参照。
このメソッドは、このメソッドがインターフェイス ポインターへの参照を解放するという点で、 ComPtr::GetAddressOf
とは異なります。 インターフェイス ポインターのアドレスは必要ですが、そのインターフェイスを解放しない場合は ComPtr::GetAddressOf
を使用します。
現在のテンプレート パラメーターで指定された型へのポインターを取得します。
WRL_NOTHROW Microsoft::WRL::Details::RemoveIUnknown<InterfaceType>* operator->() const;
現在のテンプレート型名で指定された型へのポインター。
このヘルパー関数は、STDMETHOD マクロを使用することで発生する不要なオーバーヘッドを除去します。 この関数は、virtual
の代わりに IUnknown
型 private
を作成します。
値を現在の ComPtr
に割り当てます。
WRL_NOTHROW ComPtr& operator=(
decltype(__nullptr)
);
WRL_NOTHROW ComPtr& operator=(
_In_opt_ T *other
);
template <typename U>
WRL_NOTHROW ComPtr& operator=(
_In_opt_ U *other
);
WRL_NOTHROW ComPtr& operator=(
const ComPtr &other
);
template<class U>
WRL_NOTHROW ComPtr& operator=(
const ComPtr<U>& other
);
WRL_NOTHROW ComPtr& operator=(
_Inout_ ComPtr &&other
);
template<class U>
WRL_NOTHROW ComPtr& operator=(
_Inout_ ComPtr<U>&& other
);
U
クラス。
other
型または別の ComPtr
へのポインター、参照、または右辺値参照。
現在の ComPtr
への参照。
この演算子の最初のバージョンでは、現在の ComPtr
に空の値が割り当てられます。
2 番目のバージョンでは、割り当てインターフェイス ポインターが現在の ComPtr
インターフェイス ポインターと同じでない場合、2 番目のインターフェイス ポインターが現在の ComPtr
に割り当てられます。
3 番目のバージョンでは、割り当てインターフェイス ポインターが現在の ComPtr
に割り当てられます。
4 番目のバージョンでは、割り当て値のインターフェイス ポインターが現在の ComPtr
インターフェイス ポインターと同じでない場合、2 番目のインターフェイス ポインターが現在の ComPtr
に割り当てられます。
5 番目のバージョンはコピー演算子です。ComPtr
への参照が現在の ComPtr
に割り当てられます。
6 番目のバージョンは、移動セマンティクスを使用するコピー演算子です。任意の型が静的キャストであり、現在の ComPtr
に割り当てられる場合は、ComPtr
への右辺値参照です。
7 番目のバージョンは、移動セマンティクスを使用するコピー演算子です。U
型のComPtr
への右辺値参照は静的キャストされ、現在のComPtr
に割り当てられます。
2 つの ComPtr
オブジェクトが等しいかどうかを示します。
bool operator==(
const ComPtr<T>& a,
const ComPtr<U>& b
);
bool operator==(
const ComPtr<T>& a,
decltype(__nullptr)
);
bool operator==(
decltype(__nullptr),
const ComPtr<T>& a
);
a
ComPtr
オブジェクトへの参照です。
b
別の ComPtr
オブジェクトへの参照。
最初の演算子は、オブジェクト a
がオブジェクト b
と等しい場合はtrue
を生成します。それ以外の場合はfalse
。
2 番目と 3 番目の演算子は、オブジェクトa
がnullptr
と等しい場合はtrue
を生成します。それ以外の場合はfalse
。
2 つの ComPtr
オブジェクトが等しくないかどうかを示します。
bool operator!=(
const ComPtr<T>& a,
const ComPtr<U>& b
);
bool operator!=(
const ComPtr<T>& a,
decltype(__nullptr)
);
bool operator!=(
decltype(__nullptr),
const ComPtr<T>& a
);
a
ComPtr
オブジェクトへの参照です。
b
別の ComPtr
オブジェクトへの参照。
最初の演算子は、オブジェクトa
がオブジェクト b
と等しくない場合はtrue
を生成します。それ以外の場合はfalse
。
オブジェクトa
がnullptr
と等しくない場合、2 番目と 3 番目の演算子はtrue
を生成します。それ以外の場合はfalse
。
ComPtr
でインターフェイスのオブジェクトの有効期間が管理されているかどうかを示します。
WRL_NOTHROW operator Microsoft::WRL::Details::BoolType() const;
インターフェイスがこの ComPtr
に関連付けられている場合は、 BoolStruct::Member
データ メンバーのアドレス。それ以外の場合は nullptr
。
この ComPtr
に関連付けられ、管理されているインターフェイスへのポインターが含まれています。
InterfaceType *ptr_;
ptr_
は、保護された内部のデータ メンバーです。
この ComPtr
に関連付けられているインターフェイスを解放し、解放されたインターフェイスへのポインターを含む ptr_
データ メンバーのアドレスを取得します。
T** ReleaseAndGetAddressOf();
このComPtr
のptr_
データ メンバーのアドレス。
この ComPtr
に関連付けられているインターフェイスを解放し、新しい参照カウントを返します。
unsigned long Reset();
基になるインターフェイスに残っている参照の数 (存在する場合)。
指定された ComPtr
によって管理されているインターフェイスと現在の ComPtr
によって管理されるインターフェイスを交換します。
void Swap(
_Inout_ ComPtr&& r
);
void Swap(
_Inout_ ComPtr& r
);
r
ComPtr
です。