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

Jméno popis
WeakRef::WeakRef Konstruktor Inicializuje novou instanci WeakRef třídy.
WeakRef::~WeakRef Destruktor Deinicializuje aktuální instanci WeakRef třídy.

Veřejné metody

Jméno 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

Jméno 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ě AsAsIIDWindows 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 WeakRefnullptr , 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

ComPtr
 └ WeakRef

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 a ptr je nastavena na nullptrhodnotu .

  • S_OK Pokud je tato operace úspěšná, ale aktuální WeakRef objekt již byl vydán. Parametr ptr je nastaven na nullptrhodnotu .

  • S_OK pokud je tato operace úspěšná, ale aktuální WeakRef objekt není odvozen z parametru U. Parametr ptr je nastaven na nullptrhodnotu .

Poznámky

Chyba se vygeneruje, pokud je IWeakReferenceparametr 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 a ptr je nastavena na nullptrhodnotu .

  • S_OK Pokud je tato operace úspěšná, ale aktuální WeakRef objekt již byl vydán. Parametr ptr je nastaven na nullptrhodnotu .

  • S_OK pokud je tato operace úspěšná, ale aktuální WeakRef objekt není odvozen z parametru riid. Parametr ptr je nastaven na nullptrhodnotu . (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 ptrnullptr.

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 WeakRefnullptrkód . Místo toho zkontrolujte ptrnullptr.

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.