Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Creates a smart pointer type that represents the interface specified by the template parameter. ComPtr automatically maintains a reference count for the underlying interface pointer and releases the interface when the reference count goes to zero.
Syntax
template <typename T>
class ComPtr;
template<class U>
friend class ComPtr;
Parameters
T
The interface that the ComPtr represents.
U
A class to which the current ComPtr is a friend. (The template that uses this parameter is protected.)
Remarks
ComPtr<> declares a type that represents the underlying interface pointer. Use ComPtr<> to declare a variable and then use the arrow member-access operator (->) to access an interface member function.
For more information about smart pointers, see the "COM Smart Pointers" subsection of the COM Coding Practices article.
Members
Public Typedefs
| Name | Description |
|---|---|
InterfaceType |
A synonym for the type specified by the T template parameter. |
Public Constructors
| Name | Description |
|---|---|
ComPtr::ComPtr |
Initializes a new instance of the ComPtr class. Overloads provide default, copy, move, and conversion constructors. |
ComPtr::~ComPtr |
Deinitializes an instance of ComPtr. |
Public Methods
| Name | Description |
|---|---|
ComPtr::As |
Returns a ComPtr object that represents the interface identified by the specified template parameter. |
ComPtr::AsIID |
Returns a ComPtr object that represents the interface identified by the specified interface ID. |
ComPtr::AsWeak |
Retrieves a weak reference to the current object. |
ComPtr::Attach |
Associates this ComPtr with the interface type specified by the current template type parameter. |
ComPtr::CopyTo |
Copies the current or specified interface associated with this ComPtr to the specified output pointer. |
ComPtr::Detach |
Disassociates this ComPtr from the interface that it represents. |
ComPtr::Get |
Retrieves a pointer to the interface that is associated with this ComPtr. |
ComPtr::GetAddressOf |
Retrieves the address of the ptr_ data member, which contains a pointer to the interface represented by this ComPtr. |
ComPtr::ReleaseAndGetAddressOf |
Releases the interface associated with this ComPtr and then retrieves the address of the ptr_ data member, which contains a pointer to the interface that was released. |
ComPtr::Reset |
Releases the interface associated with this ComPtr and returns the new reference count. |
ComPtr::Swap |
Exchanges the interface managed by the current ComPtr with the interface managed by the specified ComPtr. |
Protected Methods
| Name | Description |
|---|---|
ComPtr::InternalAddRef |
Increments the reference count of the interface associated with this ComPtr. |
ComPtr::InternalRelease |
Performs a COM Release operation on the interface associated with this ComPtr. |
Public Operators
| Name | Description |
|---|---|
ComPtr::operator& |
Retrieves the address of the current ComPtr. |
ComPtr::operator-> |
Retrieves a pointer to the type specified by the current template parameter. |
ComPtr::operator= |
Assigns a value to the current ComPtr. |
ComPtr::operator== |
Indicates whether two ComPtr objects are equal. |
ComPtr::operator!= |
Indicates whether two ComPtr objects aren't equal. |
ComPtr::operator Microsoft::WRL::Details::BoolType |
Indicates whether a ComPtr is managing the object lifetime of an interface. |
Protected Data Members
| Name | Description |
|---|---|
ComPtr::ptr_ |
Contains a pointer to the interface that is associated with, and managed by this ComPtr. |
Inheritance Hierarchy
ComPtr
Requirements
Header: client.h
Namespace: Microsoft::WRL
ComPtr::~ComPtr
Deinitializes an instance of ComPtr.
WRL_NOTHROW ~ComPtr();
ComPtr::As
Returns a ComPtr object that represents the interface identified by the specified template parameter.
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* p
) const;
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> p
) const;
Parameters
U
The interface to be represented by parameter p.
p
A ComPtr object that represents the interface specified by parameter U. Parameter p must not refer to the current ComPtr object.
Remarks
The first template is the form that you should use in your code. The second template is an internal, helper specialization. It supports C++ language features such as the auto type deduction keyword.
Return Value
S_OK if successful; otherwise, an HRESULT that indicates the error.
ComPtr::AsIID
Returns a ComPtr object that represents the interface identified by the specified interface ID.
WRL_NOTHROW HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IUnknown>* p
) const;
Parameters
riid
An interface ID.
p
If the object has an interface whose ID equals riid, a doubly indirect pointer to the interface specified by the riid parameter. Otherwise, a pointer to IUnknown.
Return Value
S_OK if successful; otherwise, an HRESULT that indicates the error.
ComPtr::AsWeak
Retrieves a weak reference to the current object.
HRESULT AsWeak(
_Out_ WeakRef* pWeakRef
);
Parameters
pWeakRef
When this operation completes, a pointer to a weak reference object.
Return Value
S_OK if successful; otherwise, an HRESULT that indicates the error.
ComPtr::Attach
Associates this ComPtr with the interface type specified by the current template type parameter.
void Attach(
_In_opt_ InterfaceType* other
);
Parameters
other
An interface type.
ComPtr::ComPtr
Initializes a new instance of the ComPtr class. Overloads provide default, copy, move, and conversion constructors.
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 *>
);
Parameters
U
The type of the other parameter.
other
An object of type U.
Return Value
Remarks
The first constructor is the default constructor, which implicitly creates an empty object. The second constructor specifies __nullptr, which explicitly creates an empty object.
The third constructor creates an object from the object specified by a pointer. The ComPtr now owns the pointed-to memory and maintains a reference count to it.
The fourth and fifth constructors are copy constructors. The fifth constructor copies an object if it's convertible to the current type.
The sixth and seventh constructors are move constructors. The seventh constructor moves an object if it's convertible to the current type.
ComPtr::CopyTo
Copies the current or specified interface associated with this ComPtr to the specified pointer.
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;
Parameters
U
A type name.
ptr
When this operation completes, a pointer to the requested interface.
riid
An interface ID.
Return Value
S_OK if successful; otherwise, an HRESULT that indicates why the implicit QueryInterface operation failed.
Remarks
The first function returns a copy of a pointer to the interface associated with this ComPtr. This function always returns S_OK.
The second function performs a QueryInterface operation on the interface associated with this ComPtr for the interface specified by the riid parameter.
The third function performs a QueryInterface operation on the interface associated with this ComPtr for the underlying interface of the U parameter.
ComPtr::Detach
Disassociates this ComPtr object from the interface that it represents.
T* Detach();
Return Value
A pointer to the interface that was represented by this ComPtr object.
ComPtr::Get
Retrieves a pointer to the interface that is associated with this ComPtr.
T* Get() const;
Return Value
Pointer to the interface that is associated with this ComPtr.
ComPtr::GetAddressOf
Retrieves the address of the ptr_ data member, which contains a pointer to the interface represented by this ComPtr.
T* const* GetAddressOf() const;
T** GetAddressOf();
Return Value
The address of a variable.
ComPtr::InternalAddRef
Increments the reference count of the interface associated with this ComPtr.
void InternalAddRef() const;
Remarks
This method is protected.
ComPtr::InternalRelease
Performs a COM Release operation on the interface associated with this ComPtr.
unsigned long InternalRelease();
Remarks
This method is protected.
ComPtr::operator&
Releases the interface associated with this ComPtr object and then retrieves the address of the ComPtr object.
Details::ComPtrRef<WeakRef> operator&()
const Details::ComPtrRef<const WeakRef> operator&() const
Return Value
A weak reference to the current ComPtr.
Remarks
This method differs from ComPtr::GetAddressOf in that this method releases a reference to the interface pointer. Use ComPtr::GetAddressOf when you require the address of the interface pointer but don't want to release that interface.
ComPtr::operator->
Retrieves a pointer to the type specified by the current template parameter.
WRL_NOTHROW Microsoft::WRL::Details::RemoveIUnknown<InterfaceType>* operator->() const;
Return Value
Pointer to the type specified by the current template type name.
Remarks
This helper function removes unnecessary overhead caused by using the STDMETHOD macro. This function makes IUnknown types private instead of virtual.
ComPtr::operator=
Assigns a value to the current 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
);
Parameters
U
A class.
other
A pointer, reference, or rvalue reference to a type or another ComPtr.
Return Value
A reference to the current ComPtr.
Remarks
The first version of this operator assigns an empty value to the current ComPtr.
In the second version, if the assigning interface pointer isn't the same as the current ComPtr interface pointer, the second interface pointer is assigned to the current ComPtr.
In the third version, the assigning interface pointer is assigned to the current ComPtr.
In the fourth version, if the interface pointer of the assigning value isn't the same as the current ComPtr interface pointer, the second interface pointer is assigned to the current ComPtr.
The fifth version is a copy operator; a reference to a ComPtr is assigned to the current ComPtr.
The sixth version is a copy operator that uses move semantics; an rvalue reference to a ComPtr if any type is static cast and then assigned to the current ComPtr.
The seventh version is a copy operator that uses move semantics; an rvalue reference to a ComPtr of type U is static cast then and assigned to the current ComPtr.
ComPtr::operator==
Indicates whether two ComPtr objects are equal.
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
);
Parameters
a
A reference to a ComPtr object.
b
A reference to another ComPtr object.
Return Value
The first operator yields true if object a is equal to object b; otherwise, false.
The second and third operators yield true if object a is equal to nullptr; otherwise, false.
ComPtr::operator!=
Indicates whether two ComPtr objects aren't equal.
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
);
Parameters
a
A reference to a ComPtr object.
b
A reference to another ComPtr object.
Return Value
The first operator yields true if object a isn't equal to object b; otherwise, false.
The second and third operators yield true if object a isn't equal to nullptr; otherwise, false.
ComPtr::operator Microsoft::WRL::Details::BoolType
Indicates whether a ComPtr is managing the object lifetime of an interface.
WRL_NOTHROW operator Microsoft::WRL::Details::BoolType() const;
Return Value
If an interface is associated with this ComPtr, the address of the BoolStruct::Member data member; otherwise, nullptr.
ComPtr::ptr_
Contains a pointer to the interface that is associated with, and managed by this ComPtr.
InterfaceType *ptr_;
Remarks
ptr_ is an internal, protected data member.
ComPtr::ReleaseAndGetAddressOf
Releases the interface associated with this ComPtr and then retrieves the address of the ptr_ data member, which contains a pointer to the interface that was released.
T** ReleaseAndGetAddressOf();
Return Value
The address of the ptr_ data member of this ComPtr.
ComPtr::Reset
Releases the interface associated with this ComPtr and returns the new reference count.
unsigned long Reset();
Return Value
The number of references remaining to the underlying interface, if any.
ComPtr::Swap
Exchanges the interface managed by the current ComPtr with the interface managed by the specified ComPtr.
void Swap(
_Inout_ ComPtr&& r
);
void Swap(
_Inout_ ComPtr& r
);
Parameters
r
A ComPtr.