Partager via


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 ComPtrparamè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_OKtoujours .

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 ComPtrparamè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 ComPtrparamè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.