Classe ComPtr
Cria um tipo de ponteiro inteligente que representa a interface especificada pelo parâmetro de modelo. ComPtr
mantém automaticamente uma contagem de referência para o ponteiro de interface subjacente e libera a interface quando a contagem de referência alcança zero.
Sintaxe
template <typename T>
class ComPtr;
template<class U>
friend class ComPtr;
Parâmetros
T
A interface que ComPtr
representa.
U
Uma classe para a qual a corrente ComPtr
é uma amiga. (O modelo que usa esse parâmetro é protegido.)
Comentários
ComPtr<>
declara um tipo que representa o ponteiro da interface subjacente. Use ComPtr<>
para declarar uma variável e, em seguida, use o operador de acesso de membro de seta (->
) para acessar uma função de membro de interface.
Para obter mais informações sobre ponteiros inteligentes, consulte a subseção "Ponteiros Inteligentes COM" do artigo Práticas de codificação COM.
Membros
Typedefs públicos
Nome | Descrição |
---|---|
InterfaceType |
Um sinônimo para o tipo especificado pelo parâmetro de modelo T . |
Construtores públicos
Nome | Descrição |
---|---|
ComPtr::ComPtr |
Inicializa uma nova instância da classe ComPtr . As sobrecargas fornecem construtores padrão, copiar, mover e conversão. |
ComPtr::~ComPtr |
Desliga uma instância de ComPtr . |
Métodos públicos
Nome | Descrição |
---|---|
ComPtr::As |
Retorna um objeto ComPtr que representa a interface identificada pelo parâmetro de modelo especificado. |
ComPtr::AsIID |
Retorna um objeto ComPtr que representa a interface identificada pela ID de interface especificada. |
ComPtr::AsWeak |
Recupera uma referência fraca ao objeto atual. |
ComPtr::Attach |
Associa esse ComPtr ao tipo de interface especificado pelo parâmetro de tipo de modelo atual. |
ComPtr::CopyTo |
Copia a interface atual ou especificada associada a esse ComPtr para o ponteiro de saída especificado. |
ComPtr::Detach |
Desassocia esse ComPtr da interface que ele representa. |
ComPtr::Get |
Recupera um ponteiro para a interface associada a esse ComPtr . |
ComPtr::GetAddressOf |
Recupera o endereço do membro de dados ptr_ , que contém um ponteiro para a interface representada por esse ComPtr . |
ComPtr::ReleaseAndGetAddressOf |
Libera a interface associada a esse ComPtr e recupera o endereço do membro de dados ptr_ , que contém um ponteiro para a interface que foi liberada. |
ComPtr::Reset |
Libera a interface associada a esse ComPtr e retorna a nova contagem de referência. |
ComPtr::Swap |
Troca a interface gerenciada pelo ComPtr atual com a interface gerenciada pelo ComPtr especificado. |
Métodos protegidos
Nome | Descrição |
---|---|
ComPtr::InternalAddRef |
Incrementa a contagem de referência da interface associada a esse ComPtr . |
ComPtr::InternalRelease |
Executa uma operação de versão COM na interface associada a esse ComPtr . |
Operadores públicos
Nome | Descrição |
---|---|
ComPtr::operator& |
Recupera o endereço do ComPtr atual. |
ComPtr::operator-> |
Recupera o ponteiro para o tipo especificado pelo parâmetro de modelo atual. |
ComPtr::operator= |
Atribui um valor ao ComPtr atual. |
ComPtr::operator== |
Indica se dois objetos ComPtr são iguais. |
ComPtr::operator!= |
Indica se dois objetos ComPtr não são iguais. |
ComPtr::operator Microsoft::WRL::Details::BoolType |
Indica se um ComPtr está gerenciando o tempo de vida do objeto de uma interface. |
Membros de dados protegidos
Nome | Descrição |
---|---|
ComPtr::ptr_ |
Contém um ponteiro para a interface associada e gerenciado por esse ComPtr . |
Hierarquia de herança
ComPtr
Requisitos
Cabeçalho: client.h
Namespace: Microsoft::WRL
ComPtr::~ComPtr
Desliga uma instância de ComPtr
.
WRL_NOTHROW ~ComPtr();
ComPtr::As
Retorna um objeto ComPtr
que representa a interface identificada pelo parâmetro de modelo especificado.
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* p
) const;
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> p
) const;
Parâmetros
U
A interface a ser representada pelo parâmetro p
.
p
Um objeto ComPtr
que representa a interface especificada pelo parâmetro U
. O parâmetro p
não deve se referir ao objeto ComPtr
atual.
Comentários
O primeiro modelo é o formulário que você deve usar em seu código. O segundo modelo é uma especialização interna e auxiliar. Ele dá suporte a recursos de linguagem C++, como a palavra-chave de dedução de tipo auto
.
Valor de retorno
S_OK
se for bem-sucedido; caso contrário, um HRESULT
que indica o erro.
ComPtr::AsIID
Retorna um objeto ComPtr
que representa a interface identificada pela ID de interface especificada.
WRL_NOTHROW HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IUnknown>* p
) const;
Parâmetros
riid
Um ID de interface.
p
Se o objeto tiver uma interface cuja ID é igual a riid
, um ponteiro duplamente indireto para a interface especificada pelo parâmetro riid
. Caso contrário, um ponteiro para IUnknown
.
Valor de retorno
S_OK
se for bem-sucedido; caso contrário, um HRESULT
que indica o erro.
ComPtr::AsWeak
Recupera uma referência fraca ao objeto atual.
HRESULT AsWeak(
_Out_ WeakRef* pWeakRef
);
Parâmetros
pWeakRef
Quando essa operação for concluída, um ponteiro para um objeto de referência fraco.
Valor de retorno
S_OK se tiver êxito; caso contrário, um HRESULT que indica o erro.
ComPtr::Attach
Associa esse ComPtr
ao tipo de interface especificado pelo parâmetro de tipo de modelo atual.
void Attach(
_In_opt_ InterfaceType* other
);
Parâmetros
other
Um tipo de Interface
ComPtr::ComPtr
Inicializa uma nova instância da classe ComPtr
. As sobrecargas fornecem construtores padrão, copiar, mover e conversão.
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 *>
);
Parâmetros
U
O tipo do parâmetro other
.
other
Um objeto do tipo U
.
Valor de retorno
Comentários
O primeiro construtor é o construtor padrão, que cria implicitamente um objeto vazio. O segundo construtor especifica __nullptr
, que cria explicitamente um objeto vazio.
O terceiro construtor cria um objeto do objeto especificado por um ponteiro. Agora, o ComPtr
possui a memória apontada e mantém uma contagem de referência para ela.
O quarto e o quinto construtores são construtores de cópia. O quinto construtor copia um objeto se ele for conversível para o tipo atual.
O sexto e o sétimo construtores são construtores de movimentação. O sétimo construtor move um objeto se ele for conversível para o tipo atual.
ComPtr::CopyTo
Copia a interface atual ou especificada associada a esse ComPtr
para o ponteiro especificado.
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;
Parâmetros
U
O nome de um tipo.
ptr
Quando essa operação for concluída, um ponteiro para a interface solicitada.
riid
Um ID de interface.
Valor de retorno
S_OK
se tiver êxito; caso contrário, um HRESULT
que indica por que a operação implícita QueryInterface
falhou.
Comentários
A primeira função retorna uma cópia de um ponteiro para a interface associada a esse ComPtr
. Essa função sempre retorna S_OK
.
A segunda função executa uma operação QueryInterface
na interface associada a esse ComPtr
para a interface especificada pelo parâmetro riid
.
A terceira função executa uma operação QueryInterface
na interface associada a esse ComPtr
para a interface subjacente do parâmetro U
.
ComPtr::Detach
Desassocia esse objeto ComPtr
da interface que ele representa.
T* Detach();
Valor de retorno
Um ponteiro para a interface que foi representada por esse objeto ComPtr
.
ComPtr::Get
Recupera um ponteiro para a interface associada a esse ComPtr
.
T* Get() const;
Valor de retorno
Um ponteiro para a interface associada a esse ComPtr
ComPtr::GetAddressOf
Recupera o endereço do membro de dados ptr_
, que contém um ponteiro para a interface representada por esse ComPtr
.
T* const* GetAddressOf() const;
T** GetAddressOf();
Valor de retorno
O endereço de uma variável.
ComPtr::InternalAddRef
Incrementa a contagem de referência da interface associada a esse ComPtr
.
void InternalAddRef() const;
Comentários
Esse método é protegido.
ComPtr::InternalRelease
Executa uma operação de versão COM na interface associada a esse ComPtr
.
unsigned long InternalRelease();
Comentários
Esse método é protegido.
ComPtr::operator&
Libera a interface associada a esse objeto ComPtr
e recupera o endereço do objeto ComPtr
.
Details::ComPtrRef<WeakRef> operator&()
const Details::ComPtrRef<const WeakRef> operator&() const
Valor de retorno
Uma referência fraca ao ComPtr
atual.
Comentários
A diferença entre esse método e ComPtr::GetAddressOf
é que esse método libera uma referência ao ponteiro da interface. Use ComPtr::GetAddressOf
quando precisar do endereço do ponteiro da interface, mas não quiser liberar essa interface.
ComPtr::operator->
Recupera o ponteiro para o tipo especificado pelo parâmetro de modelo atual.
WRL_NOTHROW Microsoft::WRL::Details::RemoveIUnknown<InterfaceType>* operator->() const;
Valor de retorno
Ponteiro para o tipo especificado pelo nome do tipo de modelo atual.
Comentários
Essa função auxiliar remove a sobrecarga desnecessária causada pelo uso da macro STDMETHOD. Essa função faz IUnknown
tipos private
em vez de virtual
.
ComPtr::operator=
Atribui um valor ao ComPtr
atual.
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
);
Parâmetros
U
Uma classe.
other
Uma referência de ponteiro, referência ou rvalue para um tipo ou outro ComPtr
.
Valor de retorno
Uma referência ao ComPtr
atual.
Comentários
A primeira versão desse operador atribui um valor vazio ao ComPtr
atual.
Na segunda versão, se o ponteiro da interface de atribuição não for o mesmo que o ponteiro da interface ComPtr
atual, o segundo ponteiro de interface será atribuído ao ComPtr
atual.
Na terceira versão, o ponteiro da interface de atribuição é atribuído ao ComPtr
atual.
Na quarta versão, se o ponteiro da interface do valor de atribuição não for o mesmo que o ponteiro da interface ComPtr
atual, o segundo ponteiro de interface será atribuído ao ComPtr
atual.
A quinta versão é um operador de cópia; uma referência a um ComPtr
é atribuída ao ComPtr
atual.
A sexta versão é um operador de cópia que usa semântica de movimentação; uma referência rvalue a um tipo ComPtr
se qualquer tipo for estático e, em seguida, atribuído ao ComPtr
atual.
A sétima versão é um operador de cópia que usa semântica de movimentação; uma referência rvalue a um ComPtr
de tipo U
é convertida em estática e atribuída ao ComPtr
atual.
ComPtr::operator==
Indica se dois objetos ComPtr
são iguais.
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
);
Parâmetros
a
Uma referência a um objeto ComPtr
.
b
Uma referência a outro objeto ComPtr
.
Valor de retorno
O primeiro operador produz true
se o objeto a
for igual ao objeto b
; caso contrário, false
.
O segundo e o terceiro operadores produzem true
se o objeto a
for igual a nullptr
; caso contrário, false
.
ComPtr::operator!=
Indica se dois objetos ComPtr
não são iguais.
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
);
Parâmetros
a
Uma referência a um objeto ComPtr
.
b
Uma referência a outro objeto ComPtr
.
Valor de retorno
O primeiro operador produz true
se o objeto a
não for igual ao objeto b
; caso contrário, false
.
O segundo e o terceiro operadores produzem true
se o objeto a
não for igual a nullptr
; caso contrário, false
.
ComPtr::operator Microsoft::WRL::Details::BoolType
Indica se um ComPtr
está gerenciando o tempo de vida do objeto de uma interface.
WRL_NOTHROW operator Microsoft::WRL::Details::BoolType() const;
Valor de retorno
Se uma interface estiver associada a esse ComPtr
, o endereço do membro de dados BoolStruct::Member
; caso contrário, nullptr
.
ComPtr::ptr_
Contém um ponteiro para a interface associada e gerenciado por esse ComPtr
.
InterfaceType *ptr_;
Comentários
ptr_
é um membro de dados interno protegido.
ComPtr::ReleaseAndGetAddressOf
Libera a interface associada a esse ComPtr
e recupera o endereço do membro de dados ptr_
, que contém um ponteiro para a interface que foi liberada.
T** ReleaseAndGetAddressOf();
Valor de retorno
O endereço do membro de dados ptr_
desse ComPtr
.
ComPtr::Reset
Libera a interface associada a esse ComPtr
e retorna a nova contagem de referência.
unsigned long Reset();
Valor de retorno
O número de referências restantes para a interface subjacente, se houver.
ComPtr::Swap
Troca a interface gerenciada pelo ComPtr
atual com a interface gerenciada pelo ComPtr
especificado.
void Swap(
_Inout_ ComPtr&& r
);
void Swap(
_Inout_ ComPtr& r
);
Parâmetros
r
Um ComPtr
.