ComPtr – třída

Vytvoří typ inteligentního ukazatele , který představuje rozhraní určené parametrem šablony. ComPtr automaticky udržuje počet odkazů pro ukazatel základního rozhraní a uvolní rozhraní, když počet odkazů přejde na nulu.

Syntaxe

template <typename T>
class ComPtr;

template<class U>
friend class ComPtr;

Parametry

T
Rozhraní, které ComPtr představuje.

U
Třída, ke které je aktuální ComPtr přítel. (Šablona, která používá tento parametr, je chráněna.)

Poznámky

ComPtr<> deklaruje typ, který představuje základní ukazatel rozhraní. Slouží ComPtr<> k deklaraci proměnné a pak pomocí operátoru přístupu člena šipky (->) získat přístup k členské funkci rozhraní.

Další informace o inteligentních ukazatelích najdete v pododdílu "Inteligentní ukazatele MODELU COM" v článku Postupy kódování modelu COM.

Členové

Veřejné definice typedef

Jméno popis
InterfaceType Synonymum pro typ určený parametrem T šablony.

Veřejné konstruktory

Jméno popis
ComPtr::ComPtr Inicializuje novou instanci ComPtr třídy. Přetížení poskytují výchozí konstruktory, kopírovat, přesouvat a konverzní konstruktory.
ComPtr::~ComPtr Deinicializuje instanci ComPtr.

Veřejné metody

Jméno popis
ComPtr::As ComPtr Vrátí objekt, který představuje rozhraní identifikované zadaným parametrem šablony.
ComPtr::AsIID ComPtr Vrátí objekt, který představuje rozhraní identifikované zadaným ID rozhraní.
ComPtr::AsWeak Načte slabý odkaz na aktuální objekt.
ComPtr::Attach Přidruží ho ComPtr k typu rozhraní určenému parametrem aktuálního typu šablony.
ComPtr::CopyTo Zkopíruje aktuální nebo zadané rozhraní přidružené k tomuto ComPtr ukazateli na zadaný výstupní ukazatel.
ComPtr::Detach Oddružuje ho ComPtr od rozhraní, které představuje.
ComPtr::Get Načte ukazatel na rozhraní, které je přidruženo k tomuto ComPtr.
ComPtr::GetAddressOf Načte adresu datového členu ptr_ , který obsahuje ukazatel na rozhraní reprezentované tímto ComPtr.
ComPtr::ReleaseAndGetAddressOf Uvolní rozhraní přidružené k tomuto ComPtr a pak načte adresu datového ptr_ členu, který obsahuje ukazatel na rozhraní, které bylo vydáno.
ComPtr::Reset Uvolní rozhraní přidružené k tomuto ComPtr a vrátí nový počet odkazů.
ComPtr::Swap Vymění rozhraní spravovaného aktuálním ComPtr rozhraním s rozhraním spravovaným zadaným ComPtr.

Chráněné metody

Jméno popis
ComPtr::InternalAddRef Zvýší počet odkazů rozhraní přidruženého k tomuto ComPtrrozhraní .
ComPtr::InternalRelease Provede operaci uvolnění modelu COM na rozhraní přidružené k tomuto ComPtr.

Veřejné operátory

Jméno popis
ComPtr::operator& Načte adresu aktuálního ComPtr.
ComPtr::operator-> Načte ukazatel na typ určený aktuálním parametrem šablony.
ComPtr::operator= Přiřadí hodnotu aktuálnímu ComPtr.
ComPtr::operator== Určuje, zda jsou dva ComPtr objekty stejné.
ComPtr::operator!= Určuje, jestli se dva ComPtr objekty nerovnají.
ComPtr::operator Microsoft::WRL::Details::BoolType Určuje, zda ComPtr je správa životnosti objektu rozhraní.

Chráněné datové členy

Jméno popis
ComPtr::ptr_ Obsahuje ukazatel na rozhraní, které je přidruženo a spravováno tímto ComPtr.

Hierarchie dědičnosti

ComPtr

Požadavky

Záhlaví:client.h

Obor názvů:Microsoft::WRL

ComPtr::~ComPtr

Deinicializuje instanci ComPtr.

WRL_NOTHROW ~ComPtr();

ComPtr::As

ComPtr Vrátí objekt, který představuje rozhraní identifikované zadaným parametrem šablony.

template<typename U>
HRESULT As(
   _Out_ ComPtr<U>* p
) const;

template<typename U>
HRESULT As(
   _Out_ Details::ComPtrRef<ComPtr<U>> p
) const;

Parametry

U
Rozhraní, které má být reprezentováno parametrem p.

p
Objekt ComPtr , který představuje rozhraní určené parametrem U. Parametr p nesmí odkazovat na aktuální ComPtr objekt.

Poznámky

První šablona je formulář, který byste měli použít v kódu. Druhá šablona je interní pomocná specializace. Podporuje funkce jazyka C++, jako je klíčové slovo odpočtu auto typu.

Vrácená hodnota

S_OK v případě úspěchu; jinak označuje HRESULT chybu.

ComPtr::AsIID

ComPtr Vrátí objekt, který představuje rozhraní identifikované zadaným ID rozhraní.

WRL_NOTHROW HRESULT AsIID(
   REFIID riid,
   _Out_ ComPtr<IUnknown>* p
) const;

Parametry

riid
ID rozhraní.

p
Pokud má objekt rozhraní, jehož ID se rovná riid, doubly nepřímý ukazatel na rozhraní určené parametrem riid . V opačném případě ukazatel na IUnknown.

Vrácená hodnota

S_OK v případě úspěchu; jinak označuje HRESULT chybu.

ComPtr::AsWeak

Načte slabý odkaz na aktuální objekt.

HRESULT AsWeak(
   _Out_ WeakRef* pWeakRef
);

Parametry

pWeakRef
Po dokončení této operace je ukazatel na slabý referenční objekt.

Vrácená hodnota

S_OK v případě úspěchu; v opačném případě hodnota HRESULT označující chybu.

ComPtr::Attach

Přidruží ho ComPtr k typu rozhraní určenému parametrem aktuálního typu šablony.

void Attach(
   _In_opt_ InterfaceType* other
);

Parametry

other
Typ rozhraní.

ComPtr::ComPtr

Inicializuje novou instanci ComPtr třídy. Přetížení poskytují výchozí konstruktory, kopírovat, přesouvat a konverzní konstruktory.

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 *>
);

Parametry

U
Typ parametru other.

other
Objekt typu U.

Vrácená hodnota

Poznámky

První konstruktor je výchozí konstruktor, který implicitně vytvoří prázdný objekt. Druhý konstruktor určuje __nullptr, který explicitně vytvoří prázdný objekt.

Třetí konstruktor vytvoří objekt z objektu určeného ukazatelem. Nyní ComPtr vlastní odkaz na paměť a udržuje do ní počet odkazů.

Čtvrtý a pátý konstruktor jsou konstruktory kopírování. Pátý konstruktor zkopíruje objekt, pokud je konvertibilní na aktuální typ.

Šestý a sedmý konstruktor jsou konstruktory přesunutí. Sedmý konstruktor přesune objekt, pokud je převoditelný na aktuální typ.

ComPtr::CopyTo

Zkopíruje aktuální nebo zadané rozhraní přidružené k tomuto ComPtr ukazateli.

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;

Parametry

U
Název typu.

ptr
Po dokončení této operace ukazatel na požadované rozhraní.

riid
ID rozhraní.

Vrácená hodnota

S_OK v případě úspěchu; jinak označuje, HRESULT proč implicitní QueryInterface operace selhala.

Poznámky

První funkce vrátí kopii ukazatele na rozhraní přidružené k tomuto ComPtr. Tato funkce vždy vrátí S_OK.

Druhá funkce provede QueryInterface operaci na rozhraní přidruženém k tomuto ComPtr rozhraní pro rozhraní určené parametrem riid .

Třetí funkce provádí QueryInterface operaci na rozhraní přidruženém k tomuto ComPtr rozhraní pro základní rozhraní parametru U .

ComPtr::Detach

Oddružuje tento ComPtr objekt od rozhraní, které představuje.

T* Detach();

Vrácená hodnota

Ukazatel na rozhraní, které bylo reprezentováno tímto ComPtr objektem.

ComPtr::Get

Načte ukazatel na rozhraní, které je přidruženo k tomuto ComPtr.

T* Get() const;

Vrácená hodnota

Ukazatel na rozhraní, které je přidruženo k tomuto ComPtr.

ComPtr::GetAddressOf

Načte adresu datového členu ptr_ , který obsahuje ukazatel na rozhraní reprezentované tímto ComPtr.

T* const* GetAddressOf() const;
T** GetAddressOf();

Vrácená hodnota

Adresa proměnné.

ComPtr::InternalAddRef

Zvýší počet odkazů rozhraní přidruženého k tomuto ComPtrrozhraní .

void InternalAddRef() const;

Poznámky

Tato metoda je chráněna.

ComPtr::InternalRelease

Provede operaci uvolnění modelu COM na rozhraní přidružené k tomuto ComPtr.

unsigned long InternalRelease();

Poznámky

Tato metoda je chráněna.

ComPtr::operator&

Uvolní rozhraní přidružené k tomuto ComPtr objektu a pak načte adresu objektu ComPtr .

Details::ComPtrRef<WeakRef> operator&()

const Details::ComPtrRef<const WeakRef> operator&() const

Vrácená hodnota

Slabý odkaz na aktuální ComPtr.

Poznámky

Tato metoda se liší od ComPtr::GetAddressOf toho, že tato metoda uvolní odkaz na ukazatel rozhraní. Použijte ComPtr::GetAddressOf , pokud potřebujete adresu ukazatele rozhraní, ale nechcete toto rozhraní uvolnit.

ComPtr::operator->

Načte ukazatel na typ určený aktuálním parametrem šablony.

WRL_NOTHROW Microsoft::WRL::Details::RemoveIUnknown<InterfaceType>* operator->() const;

Vrácená hodnota

Ukazatel na typ určený názvem aktuálního typu šablony.

Poznámky

Tato pomocná funkce odebere nepotřebnou režii způsobenou použitím makra STDMETHOD. Tato funkce vytváří IUnknown typy private místo virtual.

ComPtr::operator=

Přiřadí hodnotu aktuálnímu 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
);

Parametry

U
Třída.

other
Ukazatel, odkaz nebo rvalue odkaz na typ nebo jiný ComPtr.

Vrácená hodnota

Odkaz na aktuální ComPtr.

Poznámky

První verze tohoto operátoru přiřadí aktuální hodnotě ComPtr.

Ve druhé verzi, pokud přiřazení ukazatele rozhraní není stejné jako aktuální ComPtr ukazatel rozhraní, druhý ukazatel rozhraní je přiřazen k aktuální ComPtr.

Ve třetí verzi je přiřazen ukazatel rozhraní přiřazení k aktuálnímu ComPtr.

Ve čtvrté verzi platí, že pokud ukazatel rozhraní přiřazující hodnoty není stejný jako aktuální ComPtr ukazatel rozhraní, druhý ukazatel rozhraní je přiřazen k aktuálnímu ComPtr.

Pátá verze je operátor kopírování; odkaz na určitý ComPtr je přiřazen k aktuálnímu ComPtr.

Šestá verze je operátor kopírování, který používá sémantiku přesunutí; rvalue odkaz na ComPtr případný typ je statické přetypování a pak přiřazen k aktuálnímu ComPtr.

Sedmá verze je operátor kopírování, který používá sémantiku přesunutí; rvalue odkaz na typ ComPtrU je statické přetypování pak a přiřazen k aktuálnímu ComPtr.

ComPtr::operator==

Určuje, zda jsou dva ComPtr objekty stejné.

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
);

Parametry

a
Odkaz na ComPtr objekt.

b
Odkaz na jiný ComPtr objekt.

Vrácená hodnota

První operátor získá true hodnotu, je-li objekt a roven objektu b; v opačném případě false.

Druhé a třetí operátory poskytují true , pokud je objekt a roven nullptr; v opačném případě false.

ComPtr::operator!=

Určuje, jestli se dva ComPtr objekty nerovnají.

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
);

Parametry

a
Odkaz na ComPtr objekt.

b
Odkaz na jiný ComPtr objekt.

Vrácená hodnota

První operátor získá hodnotu, pokud se objekt nerovná true objektub; jinak false.a

Druhý a třetí operátory poskytují true , pokud objekt a není roven nullptr; v opačném případě false.

ComPtr::operator Microsoft::WRL::Details::BoolType

Určuje, zda ComPtr je správa životnosti objektu rozhraní.

WRL_NOTHROW operator Microsoft::WRL::Details::BoolType() const;

Vrácená hodnota

Pokud je k tomuto ComPtrrozhraní přidruženo rozhraní, adresa datového členuBoolStruct::Member, jinak . nullptr

ComPtr::ptr_

Obsahuje ukazatel na rozhraní, které je přidruženo a spravováno tímto ComPtr.

InterfaceType *ptr_;

Poznámky

ptr_ je interní chráněný datový člen.

ComPtr::ReleaseAndGetAddressOf

Uvolní rozhraní přidružené k tomuto ComPtr a pak načte adresu datového ptr_ členu, který obsahuje ukazatel na rozhraní, které bylo vydáno.

T** ReleaseAndGetAddressOf();

Vrácená hodnota

Adresa datového člena ptr_ tohoto ComPtr.

ComPtr::Reset

Uvolní rozhraní přidružené k tomuto ComPtr a vrátí nový počet odkazů.

unsigned long Reset();

Vrácená hodnota

Počet odkazů zbývajících na podkladové rozhraní, pokud existuje.

ComPtr::Swap

Vymění rozhraní spravovaného aktuálním ComPtr rozhraním s rozhraním spravovaným zadaným ComPtr.

void Swap(
   _Inout_ ComPtr&& r
);

void Swap(
   _Inout_ ComPtr& r
);

Parametry

r
Úloha ComPtr.