Dela via


WeakRef klass

Representerar en svag referens som endast kan användas av Windows Runtime, inte klassisk COM. En svag referens representerar ett objekt som kanske eller kanske inte är tillgängligt.

Syntax

class WeakRef : public ComPtr<IWeakReference>;

Medlemmar

Offentliga konstruktorer

Namn Beskrivning
WeakRef::WeakRef konstruktor Initierar en ny instans av klassen WeakRef.
WeakRef::~WeakRef Destructor Deinitialiserar den aktuella instansen WeakRef av klassen.

Offentliga metoder

Namn Beskrivning
WeakRef::As Anger den angivna ComPtr pekarparametern så att den representerar det angivna gränssnittet.
WeakRef::AsIID Anger den angivna ComPtr pekarparametern så att den representerar det angivna gränssnitts-ID:t.
WeakRef::CopyTo Tilldelar en pekare till ett gränssnitt, om det är tillgängligt, till den angivna pekarvariabeln.

Offentliga operatörer

Namn Beskrivning
WeakRef::operator& Returnerar ett ComPtrRef objekt som representerar det aktuella WeakRef objektet.

Anmärkningar

Ett WeakRef objekt har en stark referens som är associerad med ett objekt och kan vara giltigt eller ogiltigt. As() Anropa metoden eller AsIID() för att hämta en stark referens. När den starka referensen är giltig kan den komma åt det associerade objektet. När den starka referensen är ogiltig (nullptr) är det associerade objektet otillgängligt.

Ett WeakRef objekt används vanligtvis för att representera ett objekt vars existens styrs av en extern tråd eller ett program. Skapa till exempel ett WeakRef objekt från en referens till ett filobjekt. När filen är öppen är den starka referensen giltig. Men om filen stängs blir den starka referensen ogiltig.

Det finns en beteendeförändring i Asmetoderna , AsIIDoch CopyTo i Windows SDK. Tidigare, efter att ha anropat någon av dessa metoder, kan du söka efter WeakRef för nullptr att avgöra om en stark referens har hämtats, som i följande kod:

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!");
}

Koden ovan fungerar inte när du använder Windows 10 SDK (eller senare). Kontrollera i stället pekaren som skickades i för nullptr.

if (strongRef == nullptr)
{
    wprintf(L"Couldn't get strong ref!");
}

Arvshierarki

ComPtr
 └ WeakRef

Kravspecifikation

Rubrik:client.h

Namespace:Microsoft::WRL

WeakRef::WeakRef konstruktor

Initierar en ny instans av klassen WeakRef.

WeakRef();
WeakRef(
   decltype(__nullptr)
);

WeakRef(
   _In_opt_ IWeakReference* ptr
);

WeakRef(
   const ComPtr<IWeakReference>& ptr
);

WeakRef(
   const WeakRef& ptr
);

WeakRef(
   _Inout_ WeakRef&& ptr
);

Parameterar

ptr
En pekare, referens eller rvalue-reference till ett befintligt objekt som initierar det aktuella WeakRef objektet.

Anmärkningar

Den första konstruktorn initierar ett tomt WeakRef objekt. Den andra konstruktorn initierar ett WeakRef objekt från en pekare till IWeakReference gränssnittet. Den tredje konstruktorn initierar ett WeakRef objekt från en referens till ett ComPtr<IWeakReference> objekt. Den fjärde och femte konstruktorn initierar ett objekt från ett WeakRef annat WeakRef objekt.

WeakRef::~WeakRef Destructor

Deinitialiserar den aktuella instansen WeakRef av klassen.

~WeakRef();

WeakRef::As

Anger den angivna ComPtr pekarparametern så att den representerar det angivna gränssnittet.

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

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

Parameterar

U
Ett gränssnitts-ID.

ptr
När den här åtgärden är klar, ett objekt som representerar parameterN U.

Returvärde

  • S_OK om den här åtgärden lyckas. annars en HRESULT som anger orsaken till att åtgärden misslyckades och ptr är inställd på nullptr.

  • S_OK om den här åtgärden lyckas, men det aktuella WeakRef objektet redan har släppts. Parametern ptr är inställd på nullptr.

  • S_OK om den här åtgärden lyckas, men det aktuella WeakRef objektet inte härleds från parametern U. Parametern ptr är inställd på nullptr.

Anmärkningar

Ett fel genereras om parametern U är IWeakReference, eller inte härleds från IInspectable.

Den första mallen är det formulär som du bör använda i koden. Den andra mallen är en intern hjälpspecialisering. det stöder C++-språkfunktioner, till exempel nyckelordet auto typavdrag.

Från och med Windows 10 SDK anger den här metoden inte instansen WeakRef till nullptr om den svaga referensen inte kunde hämtas, så du bör undvika felkontrollkod som söker efter WeakRefnullptr. Kontrollera i stället ptr för nullptr.

WeakRef::AsIID

Anger den angivna ComPtr pekarparametern så att den representerar det angivna gränssnitts-ID:t.

HRESULT AsIID(
   REFIID riid,
   _Out_ ComPtr<IInspectable>* ptr
);

Parameterar

riid
Ett gränssnitts-ID.

ptr
När den här åtgärden är klar visas ett objekt som representerar parametern riid.

Returvärde

  • S_OK om den här åtgärden lyckas. annars en HRESULT som anger orsaken till att åtgärden misslyckades och ptr är inställd på nullptr.

  • S_OK om den här åtgärden lyckas, men det aktuella WeakRef objektet redan har släppts. Parametern ptr är inställd på nullptr.

  • S_OK om den här åtgärden lyckas, men det aktuella WeakRef objektet inte härleds från parametern riid. Parametern ptr är inställd på nullptr. Mer information finns i Anmärkningar.

Anmärkningar

Ett fel genereras om parametern riid inte härleds från IInspectable. Det här felet ersätter returvärdet.

Den första mallen är det formulär som du bör använda i koden. Den andra mallen (visas inte här, men deklareras i huvudfilen) är en intern hjälpspecialisering som stöder C++-språkfunktioner som nyckelordet auto typavdrag.

Från och med Windows 10 SDK anger den här metoden inte instansen WeakRef till nullptr om den svaga referensen inte kunde hämtas, så du bör undvika felkontrollkod som söker efter WeakRefnullptr. Sök i stället efter ptrnullptr.

WeakRef::CopyTo

Tilldelar en pekare till ett gränssnitt, om det är tillgängligt, till den angivna pekarvariabeln.

HRESULT CopyTo(
   REFIID riid,
   _Deref_out_ IInspectable** ptr
);

template<typename U>
HRESULT CopyTo(
   _Deref_out_ U** ptr
);

HRESULT CopyTo(
   _Deref_out_ IWeakReference** ptr
);

Parameterar

U
Pekar ett IInspectable gränssnitt. Ett fel genereras om U det inte härleds från IInspectable.

riid
Ett gränssnitts-ID. Ett fel genereras om riid det inte härleds från IWeakReference.

ptr
En dubbelt indirekt pekare till IInspectable eller IWeakReference.

Returvärde

S_OK om det lyckas; annars en HRESULT som beskriver felet. Mer information finns i Kommentarer.

Anmärkningar

Ett returvärde S_OK för innebär att åtgärden lyckades, men anger inte om den svaga referensen har lösts till en stark referens. Om S_OK returneras testar du att parametern ptr är en stark referens. Parametern ptr är alltså inte lika med nullptr.

Från och med Windows 10 SDK anger den här metoden inte instansen WeakRef till nullptr om den svaga referensen inte kunde hämtas, så du bör undvika felkontroll av kod som söker efter WeakRefnullptr. Sök i stället efter ptrnullptr.

WeakRef::operator&

Returnerar ett ComPtrRef objekt som representerar det aktuella WeakRef objektet.

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

Returvärde

Ett ComPtrRef objekt som representerar det aktuella WeakRef objektet.

Anmärkningar

WeakRef::operator& är en intern hjälpoperator som inte är avsedd att användas i koden.