ComPtr (classe)
Crée un type de pointeur intelligent représentant l'interface spécifiée par le paramètre de modèle. ComPtr
met à jour automatiquement un décompte de références pour le pointeur d'interface sous-jacent et libère l'interface lorsque le décompte de références atteint zéro.
Syntaxe
template <typename T>
class ComPtr;
template<class U>
friend class ComPtr;
Paramètres
T
Interface que représente ComPtr
.
U
Classe à laquelle le courant ComPtr
est un ami. (Le modèle qui utilise ce paramètre est protégé).
Notes
ComPtr<>
déclare un type qui représente le pointeur d’interface sous-jacent. Permet ComPtr<>
de déclarer une variable, puis d’utiliser l’opérateur d’accès membre de flèche (->
) pour accéder à une fonction membre d’interface.
Pour plus d’informations sur les pointeurs intelligents, consultez la sous-section « Pointeurs intelligents COM » de l’article Pratiques de codage COM.
Membres
Typedefs publics
Nom | Description |
---|---|
InterfaceType |
Synonyme du type spécifié par le paramètre de modèle T . |
Constructeurs publics
Nom | Description |
---|---|
ComPtr::ComPtr |
Initialise une nouvelle instance de la classe ComPtr . Les surcharges fournissent des constructeurs par défaut, de copie, de déplacement et de conversion. |
ComPtr::~ComPtr |
Désinitialise une instance de ComPtr . |
Méthodes publiques
Nom | Description |
---|---|
ComPtr::As |
Retourne un ComPtr objet qui représente l’interface identifiée par le paramètre de modèle spécifié. |
ComPtr::AsIID |
Retourne un ComPtr objet qui représente l’interface identifiée par l’ID d’interface spécifié. |
ComPtr::AsWeak |
Récupère une référence faible à l’objet actif. |
ComPtr::Attach |
Associe ceci ComPtr au type d’interface spécifié par le paramètre de type de modèle actuel. |
ComPtr::CopyTo |
Copie l’interface actuelle ou spécifiée associée à ce ComPtr pointeur de sortie spécifié. |
ComPtr::Detach |
Dissocie cela ComPtr de l’interface qu’elle représente. |
ComPtr::Get |
Récupère un pointeur vers l’interface associée à ce ComPtr . |
ComPtr::GetAddressOf |
Récupère l’adresse du ptr_ membre de données, qui contient un pointeur vers l’interface représentée par ce ComPtr . |
ComPtr::ReleaseAndGetAddressOf |
Libère l’interface associée à cette ComPtr interface, puis récupère l’adresse du ptr_ membre de données, qui contient un pointeur vers l’interface qui a été publiée. |
ComPtr::Reset |
Libère l’interface associée à ce ComPtr paramètre et retourne le nouveau nombre de références. |
ComPtr::Swap |
Échange l’interface gérée par le courant ComPtr avec l’interface gérée par l’interface spécifiée ComPtr . |
Méthodes protégées
Nom | Description |
---|---|
ComPtr::InternalAddRef |
Incrémente le nombre de références de l’interface associée à ce ComPtr . |
ComPtr::InternalRelease |
Effectue une opération COM Release sur l’interface associée à ce ComPtr . |
Opérateurs publics
Nom | Description |
---|---|
ComPtr::operator& |
Récupère l’adresse du fichier actif ComPtr . |
ComPtr::operator-> |
Récupère un pointeur vers le type spécifié par le paramètre de modèle actuel. |
ComPtr::operator= |
Affecte une valeur au fichier actif ComPtr . |
ComPtr::operator== |
Indique si deux objets ComPtr sont égaux. |
ComPtr::operator!= |
Indique si deux ComPtr objets ne sont pas égaux. |
ComPtr::operator Microsoft::WRL::Details::BoolType |
Indique si un ComPtr objet gère la durée de vie de l’objet d’une interface. |
Membres de données protégés
Nom | Description |
---|---|
ComPtr::ptr_ |
Contient un pointeur vers l’interface associée et gérée par ce ComPtr paramètre . |
Hiérarchie d'héritage
ComPtr
Spécifications
En-tête : client.h
Espace de noms : Microsoft::WRL
ComPtr::~ComPtr
Désinitialise une instance de ComPtr
.
WRL_NOTHROW ~ComPtr();
ComPtr::As
Retourne un ComPtr
objet qui représente l’interface identifiée par le paramètre de modèle spécifié.
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* p
) const;
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> p
) const;
Paramètres
U
Interface à représenter par paramètre p
.
p
Objet ComPtr
qui représente l’interface spécifiée par le paramètre U
. Le paramètre p
ne doit pas faire référence à l’objet actuel ComPtr
.
Notes
Le premier modèle est le formulaire que vous devez utiliser dans votre code. Le deuxième modèle est une spécialisation interne d’assistance. Il prend en charge les fonctionnalités de langage C++ telles que le mot clé de déduction de auto
type.
Valeur de retour
S_OK
si elle réussit ; sinon, qui HRESULT
indique l’erreur.
ComPtr::AsIID
Retourne un ComPtr
objet qui représente l’interface identifiée par l’ID d’interface spécifié.
WRL_NOTHROW HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IUnknown>* p
) const;
Paramètres
riid
ID d’interface.
p
Si l’objet a une interface dont l’ID est égal riid
, un pointeur doublement indirect vers l’interface spécifiée par le riid
paramètre. Sinon, pointeur vers IUnknown
.
Valeur de retour
S_OK
si elle réussit ; sinon, qui HRESULT
indique l’erreur.
ComPtr::AsWeak
Récupère une référence faible à l’objet actif.
HRESULT AsWeak(
_Out_ WeakRef* pWeakRef
);
Paramètres
pWeakRef
Une fois cette opération terminée, pointeur vers un objet de référence faible.
Valeur de retour
S_OK si l'opération réussit. Sinon, une valeur HRESULT indique l'erreur.
ComPtr::Attach
Associe ceci ComPtr
au type d’interface spécifié par le paramètre de type de modèle actuel.
void Attach(
_In_opt_ InterfaceType* other
);
Paramètres
other
Type d’interface.
ComPtr::ComPtr
Initialise une nouvelle instance de la classe ComPtr
. Les surcharges fournissent des constructeurs par défaut, de copie, de déplacement et de conversion.
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 *>
);
Paramètres
U
Type du paramètre other
.
other
Objet de type U
.
Valeur de retour
Notes
Le premier constructeur est le constructeur par défaut, qui crée implicitement un objet vide. Le deuxième constructeur spécifie __nullptr
, qui crée explicitement un objet vide.
Le troisième constructeur crée un objet à partir de l’objet spécifié par un pointeur. La ComPtr
mémoire est maintenant propriétaire de la mémoire pointue et conserve un nombre de références à celui-ci.
Les quatrième et cinquième constructeurs sont des constructeurs de copie. Le cinquième constructeur copie un objet s’il est convertible en type actuel.
Les sixième et septième constructeurs sont des constructeurs de déplacement. Le septième constructeur déplace un objet s’il est convertible en type actuel.
ComPtr::CopyTo
Copie l’interface actuelle ou spécifiée associée à ce ComPtr
pointeur vers le pointeur spécifié.
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;
Paramètres
U
Un nom de type.
ptr
Une fois cette opération terminée, pointeur vers l’interface demandée.
riid
ID d’interface.
Valeur de retour
S_OK
si elle réussit ; sinon, cela HRESULT
indique pourquoi l’opération implicite QueryInterface
a échoué.
Notes
La première fonction retourne une copie d’un pointeur vers l’interface associée à ce ComPtr
. Cette fonction retourne S_OK
toujours .
La deuxième fonction effectue une QueryInterface
opération sur l’interface associée à celle-ci ComPtr
pour l’interface spécifiée par le riid
paramètre.
La troisième fonction effectue une QueryInterface
opération sur l’interface associée à celle-ci ComPtr
pour l’interface sous-jacente du U
paramètre.
ComPtr::Detach
Dissocie cet ComPtr
objet de l’interface qu’il représente.
T* Detach();
Valeur de retour
Pointeur vers l’interface qui a été représentée par cet ComPtr
objet.
ComPtr::Get
Récupère un pointeur vers l’interface associée à ce ComPtr
.
T* Get() const;
Valeur de retour
Pointeur vers l’interface associée à ce ComPtr
.
ComPtr::GetAddressOf
Récupère l’adresse du ptr_
membre de données, qui contient un pointeur vers l’interface représentée par ce ComPtr
.
T* const* GetAddressOf() const;
T** GetAddressOf();
Valeur de retour
Adresse d’une variable.
ComPtr::InternalAddRef
Incrémente le nombre de références de l’interface associée à ce ComPtr
.
void InternalAddRef() const;
Notes
Cette méthode est protégée.
ComPtr::InternalRelease
Effectue une opération COM Release sur l’interface associée à ce ComPtr
.
unsigned long InternalRelease();
Notes
Cette méthode est protégée.
ComPtr::operator&
Libère l’interface associée à cet ComPtr
objet, puis récupère l’adresse de l’objet ComPtr
.
Details::ComPtrRef<WeakRef> operator&()
const Details::ComPtrRef<const WeakRef> operator&() const
Valeur de retour
Référence faible au courant ComPtr
.
Notes
Cette méthode diffère de ComPtr::GetAddressOf
celle de cette méthode libère une référence au pointeur d’interface. Utilisez ComPtr::GetAddressOf
quand vous avez besoin de l’adresse du pointeur d’interface, mais que vous ne souhaitez pas libérer cette interface.
ComPtr::operator->
Récupère un pointeur vers le type spécifié par le paramètre de modèle actuel.
WRL_NOTHROW Microsoft::WRL::Details::RemoveIUnknown<InterfaceType>* operator->() const;
Valeur de retour
Pointeur vers le type spécifié par le nom de type de modèle actuel.
Notes
Cette fonction d’assistance supprime une surcharge inutile causée par l’utilisation de la macro STDMETHOD. Cette fonction rend les IUnknown
types private
au lieu de virtual
.
ComPtr::operator=
Affecte une valeur au fichier actif 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
);
Paramètres
U
Classe .
other
Pointeur, référence ou référence rvalue à un type ou à un autre ComPtr
.
Valeur de retour
Référence à l’actuel ComPtr
.
Notes
La première version de cet opérateur affecte une valeur vide au paramètre actif ComPtr
.
Dans la deuxième version, si le pointeur d’interface d’affectation n’est pas le même que le pointeur d’interface actuel ComPtr
, le deuxième pointeur d’interface est affecté au pointeur actuel ComPtr
.
Dans la troisième version, le pointeur d’interface d’affectation est affecté au pointeur actuel ComPtr
.
Dans la quatrième version, si le pointeur d’interface de la valeur d’affectation n’est pas le même que le pointeur d’interface actuel ComPtr
, le deuxième pointeur d’interface est affecté au pointeur actuel ComPtr
.
La cinquième version est un opérateur de copie ; une référence à un ComPtr
est affectée à l’actuel ComPtr
.
La sixième version est un opérateur de copie qui utilise la sémantique de déplacement ; référence rvalue à un ComPtr
type si un type est casté statique, puis affecté à l’actuel ComPtr
.
La septième version est un opérateur de copie qui utilise la sémantique de déplacement ; une référence rvalue à un ComPtr
type est un cast U
statique, puis affectée à l’actuel ComPtr
.
ComPtr::operator==
Indique si deux objets ComPtr
sont égaux.
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
);
Paramètres
a
Référence à un objet ComPtr
.
b
Référence à un autre ComPtr
objet.
Valeur de retour
Le premier opérateur génère true
si l’objet a
est égal à l’objet b
; sinon, false
.
Les deuxième et troisième opérateurs produisent true
si l’objet a
est égal à nullptr
; sinon, false
.
ComPtr::operator!=
Indique si deux ComPtr
objets ne sont pas égaux.
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
);
Paramètres
a
Référence à un objet ComPtr
.
b
Référence à un autre ComPtr
objet.
Valeur de retour
Le premier opérateur génère true
si l’objet a
n’est pas égal à l’objet b
; sinon, false
.
Les deuxième et troisième opérateurs produisent true
si l’objet a
n’est pas égal à nullptr
; sinon, false
.
ComPtr::operator Microsoft::WRL::Details::BoolType
Indique si un ComPtr
objet gère la durée de vie de l’objet d’une interface.
WRL_NOTHROW operator Microsoft::WRL::Details::BoolType() const;
Valeur de retour
Si une interface est associée à ce ComPtr
paramètre, l’adresse du BoolStruct::Member
membre de données ; sinon, nullptr
.
ComPtr::ptr_
Contient un pointeur vers l’interface associée et gérée par ce ComPtr
paramètre .
InterfaceType *ptr_;
Notes
ptr_
est un membre de données interne et protégé.
ComPtr::ReleaseAndGetAddressOf
Libère l’interface associée à cette ComPtr
interface, puis récupère l’adresse du ptr_
membre de données, qui contient un pointeur vers l’interface qui a été publiée.
T** ReleaseAndGetAddressOf();
Valeur de retour
Adresse du membre de ptr_
données de ce ComPtr
.
ComPtr::Reset
Libère l’interface associée à ce ComPtr
paramètre et retourne le nouveau nombre de références.
unsigned long Reset();
Valeur de retour
Nombre de références restantes à l’interface sous-jacente, le cas échéant.
ComPtr::Swap
Échange l’interface gérée par le courant ComPtr
avec l’interface gérée par l’interface spécifiée ComPtr
.
void Swap(
_Inout_ ComPtr&& r
);
void Swap(
_Inout_ ComPtr& r
);
Paramètres
r
ComPtr
.