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 As
metodi , AsIID
e 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à
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 eptr
è impostata sunullptr
.S_OK
se l'operazione ha esito positivo, ma l'oggetto correnteWeakRef
è già stato rilasciato. Il parametroptr
viene impostato sunullptr
.S_OK
se l'operazione ha esito positivo, ma l'oggetto correnteWeakRef
non è derivato dal parametroU
. Il parametroptr
viene impostato sunullptr
.
Osservazioni:
Viene generato un errore se il parametro U
è IWeakReference
o 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 nullptr
di . 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 eptr
è impostata sunullptr
.S_OK
se l'operazione ha esito positivo, ma l'oggetto correnteWeakRef
è già stato rilasciato. Il parametroptr
viene impostato sunullptr
.S_OK
se l'operazione ha esito positivo, ma l'oggetto correnteWeakRef
non è derivato dal parametroriid
. Il parametroptr
viene impostato sunullptr
. 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 nullptr
di . 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 nullptr
di . 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.