Třída WeakRef
Představuje slabý odkaz, který lze použít pouze prostředí Windows Runtime, nikoli klasický com. Slabý odkaz představuje objekt, který může nebo nemusí být přístupný.
Syntaxe
class WeakRef : public ComPtr<IWeakReference>;
Členové
Veřejné konstruktory
Název | Popis |
---|---|
WeakRef::WeakRef konstruktor |
Inicializuje novou instanci WeakRef třídy. |
WeakRef::~WeakRef destruktor |
Deinicializuje aktuální instanci WeakRef třídy. |
Veřejné metody
Název | Popis |
---|---|
WeakRef::As |
Nastaví zadaný ComPtr parametr ukazatele tak, aby představoval zadané rozhraní. |
WeakRef::AsIID |
Nastaví zadaný ComPtr parametr ukazatele tak, aby představoval zadané ID rozhraní. |
WeakRef::CopyTo |
Přiřadí ukazatel k rozhraní, pokud je k dispozici, k zadané proměnné ukazatele. |
Veřejné operátory
Název | Popis |
---|---|
WeakRef::operator& |
ComPtrRef Vrátí objekt, který představuje aktuální WeakRef objekt. |
Poznámky
Objekt WeakRef
udržuje silný odkaz, který je přidružen k objektu a může být platný nebo neplatný. Voláním nebo AsIID()
metodou As()
získáte silný odkaz. Pokud je silný odkaz platný, může přistupovat k přidruženému objektu. Pokud je silný odkaz neplatný (nullptr
), přidružený objekt je nepřístupný.
Objekt WeakRef
se obvykle používá k reprezentaci objektu, jehož existence je řízena externím vláknem nebo aplikací. Můžete například vytvořit WeakRef
objekt z odkazu na objekt souboru. I když je soubor otevřený, silný odkaz je platný. Pokud je ale soubor zavřený, silný odkaz bude neplatný.
V sadě As
AsIID
Windows SDK došlo ke změně chování a CopyTo
metod. Dříve po volání některé z těchto metod byste mohli zkontrolovat WeakRef
nullptr
, zda byl úspěšně získán silný odkaz, jako v následujícím kódu:
WeakRef wr;
strongComptrRef.AsWeak(&wr);
// Now suppose that the object strongComPtrRef points to no longer exists
// and the following code tries to get a strong ref from the weak ref:
ComPtr<ISomeInterface> strongRef;
HRESULT hr = wr.As(&strongRef);
// This check won't work with the Windows 10 SDK version of the library.
// Check the input pointer instead.
if(wr == nullptr)
{
wprintf(L"Couldn't get strong ref!");
}
Výše uvedený kód nefunguje při použití sady Windows 10 SDK (nebo novější). Místo toho zkontrolujte ukazatel, který byl předán pro nullptr
.
if (strongRef == nullptr)
{
wprintf(L"Couldn't get strong ref!");
}
Hierarchie dědičnosti
Požadavky
Záhlaví: client.h
Obor názvů: Microsoft::WRL
WeakRef::WeakRef
konstruktor
Inicializuje novou instanci WeakRef
třídy.
WeakRef();
WeakRef(
decltype(__nullptr)
);
WeakRef(
_In_opt_ IWeakReference* ptr
);
WeakRef(
const ComPtr<IWeakReference>& ptr
);
WeakRef(
const WeakRef& ptr
);
WeakRef(
_Inout_ WeakRef&& ptr
);
Parametry
ptr
Ukazatel, odkaz nebo rvalue odkaz na existující objekt, který inicializuje aktuální WeakRef
objekt.
Poznámky
První konstruktor inicializuje prázdný WeakRef
objekt. Druhý konstruktor inicializuje WeakRef
objekt z ukazatele na IWeakReference
rozhraní. Třetí konstruktor inicializuje WeakRef
objekt z odkazu na ComPtr<IWeakReference>
objekt. Čtvrtý a pátý konstruktor inicializuje WeakRef
objekt z jiného WeakRef
objektu.
WeakRef::~WeakRef
destruktor
Deinicializuje aktuální instanci WeakRef
třídy.
~WeakRef();
WeakRef::As
Nastaví zadaný ComPtr
parametr ukazatele tak, aby představoval zadané rozhraní.
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* ptr
);
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> ptr
);
Parametry
U
ID rozhraní.
ptr
Po dokončení této operace objekt, který představuje parametr U.
Vrácená hodnota
S_OK
je-li tato operace úspěšná; v opačném případě hodnota HRESULT, která označuje důvod selhání operace aptr
je nastavena nanullptr
hodnotu .S_OK
Pokud je tato operace úspěšná, ale aktuálníWeakRef
objekt již byl vydán. Parametrptr
je nastaven nanullptr
hodnotu .S_OK
pokud je tato operace úspěšná, ale aktuálníWeakRef
objekt není odvozen z parametruU
. Parametrptr
je nastaven nanullptr
hodnotu .
Poznámky
Chyba se vygeneruje, pokud je IWeakReference
parametr U
nebo není odvozen z IInspectable
.
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.
Počínaje sadou Windows 10 SDK tato metoda nenastaví WeakRef
instanci na to, jestli nullptr
se nepodařilo získat slabý odkaz, takže byste se měli vyhnout kódu kontroly chyb, který kontroluje WeakRef
hodnotu nullptr
. Místo toho zkontrolujte, jestli není . nullptr
WeakRef::AsIID
Nastaví zadaný ComPtr
parametr ukazatele tak, aby představoval zadané ID rozhraní.
HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IInspectable>* ptr
);
Parametry
riid
ID rozhraní.
ptr
Po dokončení této operace objekt, který představuje parametr riid
.
Vrácená hodnota
S_OK
je-li tato operace úspěšná; v opačném případě hodnota HRESULT, která označuje důvod selhání operace aptr
je nastavena nanullptr
hodnotu .S_OK
Pokud je tato operace úspěšná, ale aktuálníWeakRef
objekt již byl vydán. Parametrptr
je nastaven nanullptr
hodnotu .S_OK
pokud je tato operace úspěšná, ale aktuálníWeakRef
objekt není odvozen z parametruriid
. Parametrptr
je nastaven nanullptr
hodnotu . (Další informace naleznete v tématu Poznámky.)
Poznámky
Chyba se vygeneruje, pokud riid
parametr není odvozen z IInspectable
. Tato chyba nahrazuje vrácenou hodnotu.
První šablona je formulář, který byste měli použít v kódu. Druhá šablona (zde není zobrazena, ale deklarována v souboru hlaviček) je interní pomocná specializace, která podporuje funkce jazyka C++, jako je klíčové slovo odpočtu auto
typu.
Počínaje sadou Windows 10 SDK tato metoda nenastaví WeakRef
instanci na to, jestli nullptr
se nepodařilo získat slabý odkaz, takže byste se měli vyhnout kódu kontroly chyb, který kontroluje WeakRef
hodnotu nullptr
. Místo toho zkontrolujte ptr
nullptr
.
WeakRef::CopyTo
Přiřadí ukazatel k rozhraní, pokud je k dispozici, k zadané proměnné ukazatele.
HRESULT CopyTo(
REFIID riid,
_Deref_out_ IInspectable** ptr
);
template<typename U>
HRESULT CopyTo(
_Deref_out_ U** ptr
);
HRESULT CopyTo(
_Deref_out_ IWeakReference** ptr
);
Parametry
U
IInspectable
Ukazatel rozhraní. Pokud se neodvozuje U
z IInspectable
.
riid
ID rozhraní. Pokud se neodvozuje riid
z IWeakReference
.
ptr
Doubly nepřímý ukazatel na IInspectable
nebo IWeakReference
.
Vrácená hodnota
S_OK
v případě úspěchu; jinak hodnota HRESULT, která popisuje selhání. Další informace naleznete v tématu Poznámky.
Poznámky
Návratová S_OK
hodnota znamená, že tato operace proběhla úspěšně, ale nezoznačuje, jestli byl slabý odkaz přeložen na silný odkaz. Pokud S_OK
se vrátí, otestujte, že parametr ptr
je silným odkazem. To znamená, že parametr ptr
není roven nullptr
.
Počínaje sadou Windows 10 SDK tato metoda nenastaví WeakRef
instanci na to, jestli nullptr
se nepodařilo získat slabý odkaz, takže byste se měli vyhnout kontrole chyb, který kontroluje WeakRef
nullptr
kód . Místo toho zkontrolujte ptr
nullptr
.
WeakRef::operator&
ComPtrRef
Vrátí objekt, který představuje aktuální WeakRef
objekt.
Details::ComPtrRef<WeakRef> operator&() throw()
Vrácená hodnota
Objekt ComPtrRef
, který představuje aktuální WeakRef
objekt.
Poznámky
WeakRef::operator&
je interní pomocný operátor, který není určený k použití v kódu.