Delen via


WeakRef klas

Vertegenwoordigt een zwakke verwijzing die alleen kan worden gebruikt door de Windows Runtime, niet de klassieke COM. Een zwakke verwijzing vertegenwoordigt een object dat al dan niet toegankelijk is.

Syntaxis

class WeakRef : public ComPtr<IWeakReference>;

Leden

Openbare constructors

Naam Beschrijving
WeakRef::WeakRef bouwer Initialiseert een nieuw exemplaar van de klasse WeakRef.
WeakRef::~WeakRef destructor Deinitiaaliseert het huidige exemplaar van de WeakRef klasse.

Openbare methoden

Naam Beschrijving
WeakRef::As Hiermee stelt u de opgegeven ComPtr aanwijzerparameter in om de opgegeven interface weer te geven.
WeakRef::AsIID Hiermee stelt u de opgegeven ComPtr aanwijzerparameter in om de opgegeven interface-id weer te geven.
WeakRef::CopyTo Wijst een aanwijzer toe aan een interface, indien beschikbaar, aan de opgegeven aanwijzervariabele.

Openbare operators

Naam Beschrijving
WeakRef::operator& Retourneert een ComPtrRef object dat het huidige WeakRef object vertegenwoordigt.

Opmerkingen

Een WeakRef object onderhoudt een sterke verwijzing, die is gekoppeld aan een object en kan geldig of ongeldig zijn. Roep de As() of AsIID() methode aan om een sterke referentie te verkrijgen. Wanneer de sterke verwijzing geldig is, heeft deze toegang tot het bijbehorende object. Wanneer de sterke verwijzing ongeldig is (nullptr), is het bijbehorende object niet toegankelijk.

Een WeakRef object wordt meestal gebruikt om een object te vertegenwoordigen waarvan het bestaan wordt bepaald door een externe thread of toepassing. Maak bijvoorbeeld een WeakRef object op basis van een verwijzing naar een bestandsobject. Terwijl het bestand is geopend, is de sterke verwijzing geldig. Maar als het bestand is gesloten, wordt de sterke verwijzing ongeldig.

Er is een gedragswijziging in de As, AsIIDen CopyTo methoden in de Windows SDK. Nadat u een van deze methoden hebt aangeroepen, kunt u eerst controleren WeakRefnullptr of er een sterke verwijzing is verkregen, zoals in de volgende code:

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

De bovenstaande code werkt niet wanneer u de Windows 10 SDK (of hoger) gebruikt. Controleer in plaats daarvan de aanwijzer die is doorgegeven voor nullptr.

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

Overnamehiërarchie

ComPtr
 └ WeakRef

Behoeften

Rubriek:client.h

Namespace:Microsoft::WRL

WeakRef::WeakRef bouwer

Initialiseert een nieuw exemplaar van de klasse WeakRef.

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

WeakRef(
   _In_opt_ IWeakReference* ptr
);

WeakRef(
   const ComPtr<IWeakReference>& ptr
);

WeakRef(
   const WeakRef& ptr
);

WeakRef(
   _Inout_ WeakRef&& ptr
);

Parameterwaarden

ptr
Een aanwijzer, verwijzing of rvalue-verwijzing naar een bestaand object dat het huidige WeakRef object initialiseert.

Opmerkingen

De eerste constructor initialiseert een leeg WeakRef object. De tweede constructor initialiseert een WeakRef object van een aanwijzer naar de IWeakReference interface. De derde constructor initialiseert een WeakRef object van een verwijzing naar een ComPtr<IWeakReference> object. De vierde en vijfde constructors initialiseren een WeakRef object van een ander WeakRef object.

WeakRef::~WeakRef destructor

Deinitiaaliseert het huidige exemplaar van de WeakRef klasse.

~WeakRef();

WeakRef::As

Hiermee stelt u de opgegeven ComPtr aanwijzerparameter in om de opgegeven interface weer te geven.

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

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

Parameterwaarden

U
Een interface-id.

ptr
Wanneer deze bewerking is voltooid, wordt een object dat parameter U vertegenwoordigt.

Retourwaarde

  • S_OK als deze bewerking slaagt; anders een HRESULT dat aangeeft waarom de bewerking is mislukt en ptr is ingesteld op nullptr.

  • S_OK als deze bewerking slaagt, maar het huidige WeakRef object al is vrijgegeven. De parameter ptr is ingesteld op nullptr.

  • S_OK als deze bewerking is geslaagd, maar het huidige WeakRef object niet is afgeleid van de parameter U. De parameter ptr is ingesteld op nullptr.

Opmerkingen

Er wordt een fout verzonden als de parameter U is IWeakReference, of niet is afgeleid van IInspectable.

De eerste sjabloon is het formulier dat u in uw code moet gebruiken. De tweede sjabloon is een interne helperspecialisatie; het biedt ondersteuning voor C++-taalfuncties, zoals het auto trefwoord type aftrek.

Vanaf de Windows 10 SDK stelt deze methode het WeakRef exemplaar nullptr niet in op als de zwakke verwijzing niet kan worden verkregen. U moet dus foutcodes voorkomen die de WeakRef opzoekt nullptr. Controleer in plaats daarvan ptr op nullptr.

WeakRef::AsIID

Hiermee stelt u de opgegeven ComPtr aanwijzerparameter in om de opgegeven interface-id weer te geven.

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

Parameterwaarden

riid
Een interface-id.

ptr
Wanneer deze bewerking is voltooid, is er een object dat de parameter riidvertegenwoordigt.

Retourwaarde

  • S_OK als deze bewerking slaagt; anders een HRESULT dat aangeeft waarom de bewerking is mislukt en ptr is ingesteld op nullptr.

  • S_OK als deze bewerking slaagt, maar het huidige WeakRef object al is vrijgegeven. De parameter ptr is ingesteld op nullptr.

  • S_OK als deze bewerking is geslaagd, maar het huidige WeakRef object niet is afgeleid van de parameter riid. De parameter ptr is ingesteld op nullptr. Zie Opmerkingen voor meer informatie.

Opmerkingen

Er wordt een fout verzonden als de parameter riid niet is afgeleid van IInspectable. Deze fout vervangt de retourwaarde.

De eerste sjabloon is het formulier dat u in uw code moet gebruiken. De tweede sjabloon (niet hier weergegeven, maar gedeclareerd in het headerbestand) is een interne helperspecialisatie die C++ taalfuncties ondersteunt, zoals het auto trefwoord voor typeaftrekking.

Vanaf de Windows 10 SDK stelt deze methode het WeakRef exemplaar nullptr niet in op als de zwakke verwijzing niet kan worden verkregen. U moet dus foutcodes voorkomen die de WeakRef opzoekt nullptr. Controleer in plaats daarvan op ptrnullptr.

WeakRef::CopyTo

Wijst een aanwijzer toe aan een interface, indien beschikbaar, aan de opgegeven aanwijzervariabele.

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

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

HRESULT CopyTo(
   _Deref_out_ IWeakReference** ptr
);

Parameterwaarden

U
Wijs een IInspectable interface aan. Er wordt een fout verzonden als U deze niet is afgeleid van IInspectable.

riid
Een interface-id. Er wordt een fout verzonden als riid deze niet is afgeleid van IWeakReference.

ptr
Een dubbel indirect aanwijzer naar IInspectable of IWeakReference.

Retourwaarde

S_OK indien geslaagd; anders een HRESULT dat de fout beschrijft. Zie Opmerkingenvoor meer informatie.

Opmerkingen

Een retourwaarde van S_OK betekent dat deze bewerking is geslaagd, maar geeft niet aan of de zwakke verwijzing is omgezet in een sterke verwijzing. Als S_OK de parameter wordt geretourneerd, test u of deze parameter ptr een sterke verwijzing is. Dat wil gezegd: de parameter ptr is niet gelijk aan nullptr.

Vanaf de Windows 10 SDK stelt deze methode het WeakRef exemplaar nullptr niet in op als de zwakke verwijzing niet kan worden verkregen. U moet dus foutcodes vermijden waarmee wordt WeakRefnullptrgecontroleerd. Controleer in plaats daarvan op ptrnullptr.

WeakRef::operator&

Retourneert een ComPtrRef object dat het huidige WeakRef object vertegenwoordigt.

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

Retourwaarde

Een ComPtrRef object dat het huidige WeakRef object vertegenwoordigt.

Opmerkingen

WeakRef::operator& is een interne helperoperator die niet bedoeld is om te worden gebruikt in uw code.