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
Název | Popis |
---|---|
InterfaceType |
Synonymum pro typ určený parametrem T šablony. |
Veřejné konstruktory
Název | 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
Název | 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
Název | Popis |
---|---|
ComPtr::InternalAddRef |
Zvýší počet odkazů rozhraní přidruženého k tomuto ComPtr rozhraní . |
ComPtr::InternalRelease |
Provede operaci uvolnění modelu COM na rozhraní přidružené k tomuto ComPtr . |
Veřejné operátory
Název | 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
Název | 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.
Návratová 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
.
Návratová 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.
Návratová 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
.
Návratová 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í.
Návratová 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();
Návratová 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;
Návratová 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();
Návratová hodnota
Adresa proměnné.
ComPtr::InternalAddRef
Zvýší počet odkazů rozhraní přidruženého k tomuto ComPtr
rozhraní .
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
Návratová 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;
Návratová 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
.
Návratová 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 ComPtr
U
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.
Návratová 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.
Návratová 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;
Návratová hodnota
Pokud je k tomuto ComPtr
rozhraní 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();
Návratová 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();
Návratová 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
.