ComPtr (classe)
Crea un tipo di puntatore intelligente che rappresenta l'interfaccia specificata dal parametro di modello. ComPtr
mantiene automaticamente un conteggio dei riferimenti per un puntatore di interfaccia sottostante e rilascia l'interfaccia quando il conteggio dei riferimenti va a zero.
Sintassi
template <typename T>
class ComPtr;
template<class U>
friend class ComPtr;
Parametri
T
Interfaccia rappresentata dall'oggetto ComPtr
.
U
Classe a cui l'oggetto corrente ComPtr
è un amico. (Il modello che usa questo parametro è protetto.)
Osservazioni:
ComPtr<>
dichiara un tipo che rappresenta il puntatore all'interfaccia sottostante. Usare ComPtr<>
per dichiarare una variabile e quindi usare l'operatore arrow member-access (->
) per accedere a una funzione membro dell'interfaccia.
Per altre informazioni sui puntatori intelligenti, vedere la sottosezione "Puntatori intelligenti COM" dell'articolo Procedure di codifica COM.
Membri
Typedef pubblici
Nome | Descrizione |
---|---|
InterfaceType |
Un sinonimo per il tipo specificato dal parametro di modello T . |
Costruttori pubblici
Nome | Descrizione |
---|---|
ComPtr::ComPtr |
Inizializza una nuova istanza della classe ComPtr . Gli overload forniscono costruttori predefiniti, di copia, di spostamento e di conversione. |
ComPtr::~ComPtr |
Deinitialize un'istanza di ComPtr . |
Metodi pubblici
Nome | Descrizione |
---|---|
ComPtr::As |
Restituisce un ComPtr oggetto che rappresenta l'interfaccia identificata dal parametro di modello specificato. |
ComPtr::AsIID |
Restituisce un ComPtr oggetto che rappresenta l'interfaccia identificata dall'ID interfaccia specificato. |
ComPtr::AsWeak |
Restituisce un riferimento debole all'oggetto corrente. |
ComPtr::Attach |
Associa questo ComPtr oggetto al tipo di interfaccia specificato dal parametro del tipo di modello corrente. |
ComPtr::CopyTo |
Copia l'interfaccia corrente o specificata associata al ComPtr puntatore di output specificato. |
ComPtr::Detach |
Disassocia questo ComPtr oggetto dall'interfaccia rappresentata. |
ComPtr::Get |
Recupera un puntatore all'interfaccia associata all'oggetto ComPtr . |
ComPtr::GetAddressOf |
Recupera l'indirizzo del ptr_ membro dati, che contiene un puntatore all'interfaccia rappresentata da questo ComPtr oggetto . |
ComPtr::ReleaseAndGetAddressOf |
Rilascia l'interfaccia associata a questo ComPtr e quindi recupera l'indirizzo del ptr_ membro dati, che contiene un puntatore all'interfaccia rilasciata. |
ComPtr::Reset |
Rilascia l'interfaccia associata a questo ComPtr e restituisce il nuovo conteggio dei riferimenti. |
ComPtr::Swap |
Scambia l'interfaccia gestita dall'oggetto corrente ComPtr con l'interfaccia gestita dall'oggetto specificato ComPtr . |
Metodi protetti
Nome | Descrizione |
---|---|
ComPtr::InternalAddRef |
Incrementa il conteggio dei riferimenti dell'interfaccia associata a questo ComPtr oggetto . |
ComPtr::InternalRelease |
Esegue un'operazione COM Release sull'interfaccia associata a questo ComPtr oggetto . |
Operatori pubblici
Nome | Descrizione |
---|---|
ComPtr::operator& |
Recupera l'indirizzo dell'oggetto corrente ComPtr . |
ComPtr::operator-> |
Recupera un puntatore al tipo specificato dal parametro di modello corrente. |
ComPtr::operator= |
Assegna un valore all'oggetto corrente ComPtr . |
ComPtr::operator== |
Indica se due oggetti ComPtr sono uguali. |
ComPtr::operator!= |
Indica se due ComPtr oggetti non sono uguali. |
ComPtr::operator Microsoft::WRL::Details::BoolType |
Indica se un oggetto ComPtr gestisce la durata dell'oggetto di un'interfaccia. |
Membri dati protetti
Nome | Descrizione |
---|---|
ComPtr::ptr_ |
Contiene un puntatore all'interfaccia associata e gestita da questo ComPtr oggetto . |
Gerarchia di ereditarietà
ComPtr
Requisiti
Intestazione: client.h
Spazio dei nomi: Microsoft::WRL
ComPtr::~ComPtr
Deinitialize un'istanza di ComPtr
.
WRL_NOTHROW ~ComPtr();
ComPtr::As
Restituisce un ComPtr
oggetto che rappresenta l'interfaccia identificata dal parametro di modello specificato.
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* p
) const;
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> p
) const;
Parametri
U
Interfaccia da rappresentare con il parametro p
.
p
Oggetto ComPtr
che rappresenta l'interfaccia specificata dal parametro U
. Il parametro p
non deve fare riferimento all'oggetto corrente ComPtr
.
Osservazioni:
Il primo modello è il form da usare nel codice. Il secondo modello è una specializzazione interna helper. Supporta funzionalità del linguaggio C++, ad esempio la parola chiave di deduzione del auto
tipo.
Valore restituito
S_OK
se ha esito positivo; in caso contrario, che HRESULT
indica l'errore.
ComPtr::AsIID
Restituisce un ComPtr
oggetto che rappresenta l'interfaccia identificata dall'ID interfaccia specificato.
WRL_NOTHROW HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IUnknown>* p
) const;
Parametri
riid
ID di interfaccia.
p
Se l'oggetto ha un'interfaccia il cui ID è uguale riid
a , un puntatore indiretto doubly all'interfaccia specificata dal riid
parametro . In caso contrario, un puntatore a IUnknown
.
Valore restituito
S_OK
se ha esito positivo; in caso contrario, che HRESULT
indica l'errore.
ComPtr::AsWeak
Restituisce un riferimento debole all'oggetto corrente.
HRESULT AsWeak(
_Out_ WeakRef* pWeakRef
);
Parametri
pWeakRef
Al termine di questa operazione, un puntatore a un oggetto riferimento debole.
Valore restituito
S_OK se riesce; in caso contrario, HRESULT indica un errore.
ComPtr::Attach
Associa questo ComPtr
oggetto al tipo di interfaccia specificato dal parametro del tipo di modello corrente.
void Attach(
_In_opt_ InterfaceType* other
);
Parametri
other
Tipo di interfaccia.
ComPtr::ComPtr
Inizializza una nuova istanza della classe ComPtr
. Gli overload forniscono costruttori predefiniti, di copia, di spostamento e di conversione.
WRL_NOTHROW ComPtr();
WRL_NOTHROW ComPtr(
decltype(__nullptr)
);
template<class U>
WRL_NOTHROW ComPtr(
_In_opt_ U *other
);
WRL_NOTHROW ComPtr(
const ComPtr& other
);
template<class U>
WRL_NOTHROW ComPtr(
const ComPtr<U> &other,
typename ENABLE_IF<__is_convertible_to(U*, T*), void *>
);
WRL_NOTHROW ComPtr(
_Inout_ ComPtr &&other
);
template<class U>
WRL_NOTHROW ComPtr(
_Inout_ ComPtr<U>&& other, typename ENABLE_IF<__is_convertible_to(U*, T*), void *>
);
Parametri
U
Tipo del parametro other
.
other
Oggetto di tipo U
.
Valore restituito
Osservazioni:
Il primo costruttore è il costruttore predefinito, che crea in modo implicito un oggetto vuoto. Il secondo costruttore specifica __nullptr
, che crea in modo esplicito un oggetto vuoto.
Il terzo costruttore crea un oggetto dall'oggetto specificato da un puntatore. È ComPtr
ora proprietario della memoria a punta e mantiene un conteggio dei riferimenti.
Il quarto e il quinto costruttore sono costruttori di copia. Il quinto costruttore copia un oggetto se è convertibile nel tipo corrente.
Il sesto e il settimo costruttore sono costruttori di spostamento. Il settimo costruttore sposta un oggetto se è convertibile nel tipo corrente.
ComPtr::CopyTo
Copia l'interfaccia corrente o specificata associata al ComPtr
puntatore specificato.
HRESULT CopyTo(
_Deref_out_ InterfaceType** ptr
);
HRESULT CopyTo(
REFIID riid,
_Deref_out_ void** ptr
) const;
template<typename U>
HRESULT CopyTo(
_Deref_out_ U** ptr
) const;
Parametri
U
Un nome di tipo.
ptr
Al termine di questa operazione, un puntatore all'interfaccia richiesta.
riid
ID di interfaccia.
Valore restituito
S_OK
se ha esito positivo; in caso contrario, un oggetto HRESULT
che indica il motivo per cui l'operazione implicita QueryInterface
non è riuscita.
Osservazioni:
La prima funzione restituisce una copia di un puntatore all'interfaccia associata a questo ComPtr
oggetto . Questa funzione restituisce S_OK
sempre .
La seconda funzione esegue un'operazione QueryInterface
sull'interfaccia associata a questa ComPtr
per l'interfaccia specificata dal riid
parametro .
La terza funzione esegue un'operazione QueryInterface
sull'interfaccia associata a questa ComPtr
per l'interfaccia sottostante del U
parametro .
ComPtr::Detach
Rimuove l'associazione di questo oggetto ComPtr
dall'interfaccia da esso rappresentata.
T* Detach();
Valore restituito
Puntatore all'interfaccia rappresentata da questo oggetto ComPtr
.
ComPtr::Get
Recupera un puntatore all'interfaccia associata all'oggetto ComPtr
.
T* Get() const;
Valore restituito
Puntatore all'interfaccia associata a questo ComPtr
oggetto .
ComPtr::GetAddressOf
Recupera l'indirizzo del ptr_
membro dati, che contiene un puntatore all'interfaccia rappresentata da questo ComPtr
oggetto .
T* const* GetAddressOf() const;
T** GetAddressOf();
Valore restituito
Indirizzo di una variabile.
ComPtr::InternalAddRef
Incrementa il conteggio dei riferimenti dell'interfaccia associata a questo ComPtr
oggetto .
void InternalAddRef() const;
Osservazioni:
Questo metodo è protetto.
ComPtr::InternalRelease
Esegue un'operazione COM Release sull'interfaccia associata a questo ComPtr
oggetto .
unsigned long InternalRelease();
Osservazioni:
Questo metodo è protetto.
ComPtr::operator&
Rilascia l'interfaccia associata a questo ComPtr
oggetto e quindi recupera l'indirizzo dell'oggetto ComPtr
.
Details::ComPtrRef<WeakRef> operator&()
const Details::ComPtrRef<const WeakRef> operator&() const
Valore restituito
Riferimento debole all'oggetto corrente ComPtr
.
Osservazioni:
Questo metodo differisce da in ComPtr::GetAddressOf
quanto questo metodo rilascia un riferimento al puntatore di interfaccia. Usare ComPtr::GetAddressOf
quando è necessario l'indirizzo del puntatore all'interfaccia, ma non si vuole rilasciare tale interfaccia.
ComPtr::operator->
Recupera un puntatore al tipo specificato dal parametro di modello corrente.
WRL_NOTHROW Microsoft::WRL::Details::RemoveIUnknown<InterfaceType>* operator->() const;
Valore restituito
Puntatore al tipo specificato dal nome del tipo di modello corrente.
Osservazioni:
Questa funzione helper rimuove il sovraccarico non necessario causato dall'utilizzo della macro STDMETHOD. Questa funzione rende IUnknown
i tipi private
anziché virtual
.
ComPtr::operator=
Assegna un valore all'oggetto corrente ComPtr
.
WRL_NOTHROW ComPtr& operator=(
decltype(__nullptr)
);
WRL_NOTHROW ComPtr& operator=(
_In_opt_ T *other
);
template <typename U>
WRL_NOTHROW ComPtr& operator=(
_In_opt_ U *other
);
WRL_NOTHROW ComPtr& operator=(
const ComPtr &other
);
template<class U>
WRL_NOTHROW ComPtr& operator=(
const ComPtr<U>& other
);
WRL_NOTHROW ComPtr& operator=(
_Inout_ ComPtr &&other
);
template<class U>
WRL_NOTHROW ComPtr& operator=(
_Inout_ ComPtr<U>&& other
);
Parametri
U
Classe .
other
Riferimento puntatore, riferimento o rvalue a un tipo o a un altro ComPtr
oggetto .
Valore restituito
Riferimento all'oggetto corrente ComPtr
.
Osservazioni:
La prima versione di questo operatore assegna un valore vuoto all'oggetto corrente ComPtr
.
Nella seconda versione, se il puntatore all'interfaccia di assegnazione non è uguale al puntatore di interfaccia corrente ComPtr
, il secondo puntatore di interfaccia viene assegnato all'oggetto corrente ComPtr
.
Nella terza versione il puntatore all'interfaccia di assegnazione viene assegnato all'oggetto corrente ComPtr
.
Nella quarta versione, se il puntatore dell'interfaccia del valore di assegnazione non è uguale al puntatore di interfaccia corrente ComPtr
, il secondo puntatore dell'interfaccia viene assegnato all'oggetto corrente ComPtr
.
La quinta versione è un operatore di copia; Un riferimento a un ComPtr
oggetto viene assegnato all'oggetto corrente ComPtr
.
La sesta versione è un operatore di copia che usa la semantica di spostamento; riferimento rvalue a un ComPtr
oggetto se un tipo è di tipo statico e quindi assegnato all'oggetto corrente ComPtr
.
La settima versione è un operatore di copia che usa la semantica di spostamento; Un riferimento rvalue a un ComPtr
di tipo U
viene quindi eseguito il cast statico e assegnato all'oggetto corrente ComPtr
.
ComPtr::operator==
Indica se due oggetti ComPtr
sono uguali.
bool operator==(
const ComPtr<T>& a,
const ComPtr<U>& b
);
bool operator==(
const ComPtr<T>& a,
decltype(__nullptr)
);
bool operator==(
decltype(__nullptr),
const ComPtr<T>& a
);
Parametri
a
Riferimento a un oggetto ComPtr
.
b
Riferimento a un altro ComPtr
oggetto.
Valore restituito
Il primo operatore restituisce true
se l'oggetto a
è uguale all'oggetto b
; in caso contrario, false
.
Il secondo e il terzo operatore producono true
se l'oggetto a
è uguale a nullptr
; in caso contrario, false
.
ComPtr::operator!=
Indica se due ComPtr
oggetti non sono uguali.
bool operator!=(
const ComPtr<T>& a,
const ComPtr<U>& b
);
bool operator!=(
const ComPtr<T>& a,
decltype(__nullptr)
);
bool operator!=(
decltype(__nullptr),
const ComPtr<T>& a
);
Parametri
a
Riferimento a un oggetto ComPtr
.
b
Riferimento a un altro ComPtr
oggetto.
Valore restituito
Il primo operatore restituisce true
se l'oggetto a
non è uguale all'oggetto b
; in caso contrario, false
.
Il secondo e il terzo operatore producono true
se l'oggetto a
non è uguale a nullptr
; in caso contrario, false
.
ComPtr::operator Microsoft::WRL::Details::BoolType
Indica se un oggetto ComPtr
gestisce la durata dell'oggetto di un'interfaccia.
WRL_NOTHROW operator Microsoft::WRL::Details::BoolType() const;
Valore restituito
Se un'interfaccia è associata a , ComPtr
l'indirizzo del BoolStruct::Member
membro dati; in caso contrario, nullptr
.
ComPtr::ptr_
Contiene un puntatore all'interfaccia associata e gestita da questo ComPtr
oggetto .
InterfaceType *ptr_;
Osservazioni:
ptr_
è un membro dati interno e protetto.
ComPtr::ReleaseAndGetAddressOf
Rilascia l'interfaccia associata a questo ComPtr
e quindi recupera l'indirizzo del ptr_
membro dati, che contiene un puntatore all'interfaccia rilasciata.
T** ReleaseAndGetAddressOf();
Valore restituito
Indirizzo del ptr_
membro dati di questo ComPtr
oggetto .
ComPtr::Reset
Rilascia l'interfaccia associata a questo ComPtr
e restituisce il nuovo conteggio dei riferimenti.
unsigned long Reset();
Valore restituito
Numero di riferimenti rimanenti all'interfaccia sottostante, se presenti.
ComPtr::Swap
Scambia l'interfaccia gestita dall'oggetto corrente ComPtr
con l'interfaccia gestita dall'oggetto specificato ComPtr
.
void Swap(
_Inout_ ComPtr&& r
);
void Swap(
_Inout_ ComPtr& r
);
Parametri
r
Un oggetto ComPtr
.