Condividi tramite


Classe WeakRef

Rappresenta un riferimento debole che può essere usato solamente da Windows Runtime, non da COM classico. Un riferimento debole rappresenta un oggetto che può o non può essere accessibile.

Sintassi

class WeakRef : public ComPtr<IWeakReference>;

Membri

Costruttori pubblici

Nome Descrizione
WeakRef::WeakRef costruttore Inizializza una nuova istanza della classe WeakRef.
WeakRef::~WeakRef Distruttore Deinitialize l'istanza corrente della WeakRef classe .

Metodi pubblici

Nome Descrizione
WeakRef::As Imposta il parametro del puntatore specificato ComPtr per rappresentare l'interfaccia specificata.
WeakRef::AsIID Imposta il parametro del puntatore specificato ComPtr per rappresentare l'ID di interfaccia specificato.
WeakRef::CopyTo Assegna un puntatore a un'interfaccia, se disponibile, per la variabile del puntatore specificato.

Operatori pubblici

Nome Descrizione
WeakRef::operator& Restituisce un ComPtrRef oggetto che rappresenta l'oggetto corrente WeakRef .

Osservazioni:

Un WeakRef oggetto mantiene un riferimento sicuro, associato a un oggetto e può essere valido o non valido. Chiamare il As() metodo o AsIID() per ottenere un riferimento sicuro. Quando il riferimento sicuro è valido, può accedere all'oggetto associato. Quando il riferimento sicuro non è valido (nullptr), l'oggetto associato è inaccessibile.

Un WeakRef oggetto viene in genere utilizzato per rappresentare un oggetto la cui esistenza è controllata da un thread esterno o da un'applicazione. Ad esempio, costruire un WeakRef oggetto da un riferimento a un oggetto file. Finché il file rimane aperto, il riferimento sicuro è valido. Ma se il file viene chiuso, il riferimento sicuro non è più valido.

Esiste una modifica del comportamento nei Asmetodi , AsIIDe CopyTo in Windows SDK. In precedenza, dopo aver chiamato uno di questi metodi, è possibile verificare se WeakRef nullptr un riferimento sicuro è stato ottenuto correttamente, come nel codice seguente:

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

Il codice precedente non funziona quando si usa Windows 10 SDK (o versione successiva). Controllare invece il puntatore passato per nullptr.

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

Gerarchia di ereditarietà

ComPtr
 └ WeakRef

Requisiti

Intestazione: client.h

Spazio dei nomi: Microsoft::WRL

Costruttore WeakRef::WeakRef

Inizializza una nuova istanza della classe WeakRef.

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

WeakRef(
   _In_opt_ IWeakReference* ptr
);

WeakRef(
   const ComPtr<IWeakReference>& ptr
);

WeakRef(
   const WeakRef& ptr
);

WeakRef(
   _Inout_ WeakRef&& ptr
);

Parametri

ptr
Puntatore, riferimento o riferimento rvalue a un oggetto esistente che inizializza l'oggetto corrente WeakRef .

Osservazioni:

Il primo costruttore inizializza un oggetto vuoto WeakRef . Il secondo costruttore inizializza un WeakRef oggetto da un puntatore all'interfaccia IWeakReference . Il terzo costruttore inizializza un WeakRef oggetto da un riferimento a un ComPtr<IWeakReference> oggetto . Il quarto e il quinto costruttore inizializzano un WeakRef oggetto da un altro WeakRef oggetto.

WeakRef::~WeakRef Distruttore

Deinitialize l'istanza corrente della WeakRef classe .

~WeakRef();

WeakRef::As

Imposta il parametro del puntatore specificato ComPtr per rappresentare l'interfaccia specificata.

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

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

Parametri

U
ID di interfaccia.

ptr
Al termine di questa operazione, un oggetto che rappresenta il parametro U.

Valore restituito

  • S_OK se l'operazione ha esito positivo; in caso contrario, hresult che indica il motivo per cui l'operazione non è riuscita e ptr è impostata su nullptr.

  • S_OK se l'operazione ha esito positivo, ma l'oggetto corrente WeakRef è già stato rilasciato. Il parametro ptr viene impostato su nullptr.

  • S_OK se l'operazione ha esito positivo, ma l'oggetto corrente WeakRef non è derivato dal parametro U. Il parametro ptr viene impostato su nullptr.

Osservazioni:

Viene generato un errore se il parametro U è IWeakReferenceo non è derivato da IInspectable.

Il primo modello è il form da usare nel codice. Il secondo modello è una specializzazione interna e helper; supporta funzionalità del linguaggio C++, ad esempio la parola chiave di deduzione del auto tipo.

A partire da Windows 10 SDK, questo metodo non imposta l'istanza WeakRef su nullptr se non è stato possibile ottenere il riferimento debole, pertanto è consigliabile evitare il controllo degli errori del codice che controlla la WeakRef presenza nullptrdi . Controllare invece ptr per nullptr.

WeakRef::AsIID

Imposta il parametro del puntatore specificato ComPtr per rappresentare l'ID di interfaccia specificato.

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

Parametri

riid
ID di interfaccia.

ptr
Al termine dell'operazione, un oggetto che rappresenta il parametro riid.

Valore restituito

  • S_OK se l'operazione ha esito positivo; in caso contrario, hresult che indica il motivo per cui l'operazione non è riuscita e ptr è impostata su nullptr.

  • S_OK se l'operazione ha esito positivo, ma l'oggetto corrente WeakRef è già stato rilasciato. Il parametro ptr viene impostato su nullptr.

  • S_OK se l'operazione ha esito positivo, ma l'oggetto corrente WeakRef non è derivato dal parametro riid. Il parametro ptr viene impostato su nullptr. Per altre informazioni, vedere Note.

Osservazioni:

Viene generato un errore se il parametro riid non è derivato da IInspectable. Questo errore sostituisce il valore restituito.

Il primo modello è il form da usare nel codice. Il secondo modello (non illustrato qui, ma dichiarato nel file di intestazione) è una specializzazione helper interna che supporta le funzionalità del linguaggio C++, ad esempio la parola chiave di deduzione del auto tipo.

A partire da Windows 10 SDK, questo metodo non imposta l'istanza WeakRef su nullptr se non è stato possibile ottenere il riferimento debole, pertanto è consigliabile evitare il controllo degli errori del codice che controlla la WeakRef presenza nullptrdi . Cercare invece ptr nullptr.

WeakRef::CopyTo

Assegna un puntatore a un'interfaccia, se disponibile, per la variabile del puntatore specificato.

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

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

HRESULT CopyTo(
   _Deref_out_ IWeakReference** ptr
);

Parametri

U
Puntatore a un'interfaccia IInspectable . Viene generato un errore se U non è derivato da IInspectable.

riid
ID di interfaccia. Viene generato un errore se riid non è derivato da IWeakReference.

ptr
Puntatore indiretto doubly a IInspectable o IWeakReference.

Valore restituito

S_OK se ha esito positivo; in caso contrario, hresult che descrive l'errore. Per altre informazioni, vedere Note.

Osservazioni:

Un valore restituito indica S_OK che questa operazione è riuscita, ma non indica se il riferimento debole è stato risolto in un riferimento sicuro. Se S_OK viene restituito, verificare che il parametro ptr sia un riferimento sicuro, ovvero il parametro ptr non è uguale a nullptr.

A partire da Windows 10 SDK, questo metodo non imposta l'istanza WeakRef su nullptr se non è stato possibile ottenere il riferimento debole, quindi è consigliabile evitare il controllo degli errori del codice che controlla la WeakRef presenza nullptrdi . Cercare invece ptr nullptr.

WeakRef::operator&

Restituisce un ComPtrRef oggetto che rappresenta l'oggetto corrente WeakRef .

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

Valore restituito

Oggetto ComPtrRef che rappresenta l'oggetto corrente WeakRef .

Osservazioni:

WeakRef::operator& è un operatore helper interno che non deve essere usato nel codice.