ComPtr 클래스
템플릿 매개 변수로 지정된 인터페이스를 나타내는 스마트 포인터 형식을 만듭니다. ComPtr은 기본 인터페이스 포인터의 참조 개수를 자동으로 관리하여 참조 횟수가 0이 되면 인터페이스를 릴리스합니다.
구문
template <typename T>
class ComPtr;
template<class U>
friend class ComPtr;
매개 변수
T
나타내는 ComPtr 인터페이스입니다.
U
현재 ComPtr 가 친구인 클래스입니다. 이 매개 변수를 사용하는 템플릿은 보호됩니다.
설명
ComPtr<> 는 기본 인터페이스 포인터를 나타내는 형식을 선언합니다. 변수를 선언한 다음 화살표 멤버 액세스 연산자(->)를 사용하여 인터페이스 멤버 함수에 액세스하는 데 사용합니다ComPtr<>.
스마트 포인터에 대한 자세한 내용은 COM 코딩 사례 문서의 "COM 스마트 포인터" 하위 섹션을 참조하세요.
멤버
공용 Typedefs
| Name | Description |
|---|---|
InterfaceType |
T 템플릿 매개 변수로 지정된 형식의 동의어입니다. |
Public 생성자
| 이름 | Description |
|---|---|
ComPtr::ComPtr |
ComPtr 클래스의 새 인스턴스를 초기화합니다. 오버로드는 기본, 복사, 이동 및 변환 생성자를 제공합니다. |
ComPtr::~ComPtr |
.의 ComPtr인스턴스를 초기화합니다. |
Public 메서드
| 이름 | Description |
|---|---|
ComPtr::As |
ComPtr 지정된 템플릿 매개 변수로 식별되는 인터페이스를 나타내는 개체를 반환합니다. |
ComPtr::AsIID |
ComPtr 지정된 인터페이스 ID로 식별되는 인터페이스를 나타내는 개체를 반환합니다. |
ComPtr::AsWeak |
현재 개체에 대한 약한 참조를 검색합니다. |
ComPtr::Attach |
이를 ComPtr 현재 템플릿 형식 매개 변수에 지정된 인터페이스 형식과 연결합니다. |
ComPtr::CopyTo |
이와 ComPtr 연결된 현재 또는 지정된 인터페이스를 지정된 출력 포인터에 복사합니다. |
ComPtr::Detach |
이를 나타내는 인터페이스와 연결 ComPtr 해제합니다. |
ComPtr::Get |
이 ComPtr인터페이스와 연결된 인터페이스에 대한 포인터를 검색합니다. |
ComPtr::GetAddressOf |
이 ComPtr인터페이스가 나타내는 인터페이스에 ptr_ 대한 포인터를 포함하는 데이터 멤버의 주소를 검색합니다. |
ComPtr::ReleaseAndGetAddressOf |
이와 ComPtr 연결된 인터페이스를 해제한 다음 릴리스된 인터페이스에 ptr_ 대한 포인터를 포함하는 데이터 멤버의 주소를 검색합니다. |
ComPtr::Reset |
이와 ComPtr 연결된 인터페이스를 해제하고 새 참조 수를 반환합니다. |
ComPtr::Swap |
현재 ComPtr 에서 관리하는 인터페이스를 지정된 인터페이스에서 관리하는 인터페이스와 교환합니다 ComPtr. |
Protected 메서드
| Name | Description |
|---|---|
ComPtr::InternalAddRef |
이 ComPtr인터페이스와 연결된 인터페이스의 참조 수를 증분합니다. |
ComPtr::InternalRelease |
이 ComPtr인터페이스와 연결된 인터페이스에서 COM 릴리스 작업을 수행합니다. |
Public 연산자
| 이름 | Description |
|---|---|
ComPtr::operator& |
현재 ComPtr.의 주소를 검색합니다. |
ComPtr::operator-> |
현재 템플릿 매개 변수에 지정된 형식에 대한 포인터를 검색합니다. |
ComPtr::operator= |
현재 ComPtr에 값을 할당합니다. |
ComPtr::operator== |
두 ComPtr 개체가 같은지를 나타냅니다. |
ComPtr::operator!= |
두 ComPtr 개체가 같지 않은지 여부를 나타냅니다. |
ComPtr::operator Microsoft::WRL::Details::BoolType |
인터페이스의 ComPtr 개체 수명을 관리하는지 여부를 나타냅니다. |
보호된 데이터 멤버
| Name | Description |
|---|---|
ComPtr::ptr_ |
연결되고 이 ComPtr인터페이스에 의해 관리되는 인터페이스에 대한 포인터를 포함합니다. |
상속 계층 구조
ComPtr
요구 사항
헤더:client.h
네임스페이스:Microsoft::WRL
ComPtr::~ComPtr
.의 ComPtr인스턴스를 초기화합니다.
WRL_NOTHROW ~ComPtr();
ComPtr::As
ComPtr 지정된 템플릿 매개 변수로 식별되는 인터페이스를 나타내는 개체를 반환합니다.
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* p
) const;
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> p
) const;
매개 변수
U
매개 변수 p로 나타낼 인터페이스입니다.
p
ComPtr 매개 변수U로 지정된 인터페이스를 나타내는 개체입니다. 매개 변수 p 는 현재 ComPtr 개체를 참조해서는 안됩니다.
설명
첫 번째 템플릿은 코드에서 사용해야 하는 폼입니다. 두 번째 템플릿은 내부 도우미 전문화입니다. 형식 추론 키워드와 같은 auto C++ 언어 기능을 지원합니다.
Return Value
S_OK if successful; otherwise, an HRESULT that indicates the error.
ComPtr::AsIID
ComPtr 지정된 인터페이스 ID로 식별되는 인터페이스를 나타내는 개체를 반환합니다.
WRL_NOTHROW HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IUnknown>* p
) const;
매개 변수
riid
인터페이스 ID입니다.
p
개체에 ID가 같은 riid인터페이스가 있는 경우 매개 변수로 지정된 riid 인터페이스에 대한 이중 간접 포인터입니다. 그렇지 않으면 .에 대한 포인터입니다 IUnknown.
Return Value
S_OK if successful; otherwise, an HRESULT that indicates the error.
ComPtr::AsWeak
현재 개체에 대한 약한 참조를 검색합니다.
HRESULT AsWeak(
_Out_ WeakRef* pWeakRef
);
매개 변수
pWeakRef
이 작업이 완료되면 약한 참조 개체에 대한 포인터입니다.
Return Value
성공하면 S_OK이고, 그렇지 않으면 오류를 나타내는 HRESULT입니다.
ComPtr::Attach
이를 ComPtr 현재 템플릿 형식 매개 변수에 지정된 인터페이스 형식과 연결합니다.
void Attach(
_In_opt_ InterfaceType* other
);
매개 변수
other
인터페이스 형식입니다.
ComPtr::ComPtr
ComPtr 클래스의 새 인스턴스를 초기화합니다. 오버로드는 기본, 복사, 이동 및 변환 생성자를 제공합니다.
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 *>
);
매개 변수
U
other 매개 변수의 형식입니다.
other
U 형식의 개체입니다.
반환 값
설명
첫 번째 생성자는 빈 개체를 암시적으로 만드는 기본 생성자입니다. 두 번째 생성자는 빈 개체를 명시적으로 만드는 지정 __nullptr합니다.
세 번째 생성자는 포인터로 지정된 개체에서 개체를 만듭니다. ComPtr 이제 뾰족한 메모리를 소유하고 이에 대한 참조 수를 유지 관리합니다.
네 번째 및 다섯 번째 생성자는 복사 생성자입니다. 다섯 번째 생성자는 개체를 현재 형식으로 변환할 수 있는 경우 복사합니다.
여섯 번째 및 일곱 번째 생성자는 이동 생성자입니다. 7번째 생성자는 개체를 현재 형식으로 변환할 수 있는 경우 이동합니다.
ComPtr::CopyTo
이와 ComPtr 연결된 현재 또는 지정된 인터페이스를 지정된 포인터에 복사합니다.
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;
매개 변수
U
형식 이름.
ptr
이 작업이 완료되면 요청된 인터페이스에 대한 포인터입니다.
riid
인터페이스 ID입니다.
Return Value
S_OK if successful; otherwise, an HRESULT that indicates why the implicit QueryInterface operation failed.
설명
첫 번째 함수는 이 ComPtr함수와 연결된 인터페이스에 대한 포인터의 복사본을 반환합니다. 이 함수는 항상 S_OK.
두 번째 함수는 매개 변수로 QueryInterface 지정된 인터페이스에 대해 이와 ComPtr 연결된 인터페이스에서 riid 작업을 수행합니다.
세 번째 함수는 매개 변수의 기본 인터페이스에 대해 이와 ComPtr 연결된 인터페이스 U 에서 작업을 수행 QueryInterface 합니다.
ComPtr::Detach
이 ComPtr 개체를 나타내는 인터페이스에서 분리합니다.
T* Detach();
Return Value
이 ComPtr 개체가 나타내는 인터페이스에 대한 포인터입니다.
ComPtr::Get
이 ComPtr인터페이스와 연결된 인터페이스에 대한 포인터를 검색합니다.
T* Get() const;
Return Value
이 ComPtr인터페이스와 연결된 인터페이스에 대한 포인터입니다.
ComPtr::GetAddressOf
이 ComPtr인터페이스가 나타내는 인터페이스에 ptr_ 대한 포인터를 포함하는 데이터 멤버의 주소를 검색합니다.
T* const* GetAddressOf() const;
T** GetAddressOf();
Return Value
변수의 주소입니다.
ComPtr::InternalAddRef
이 ComPtr인터페이스와 연결된 인터페이스의 참조 수를 증분합니다.
void InternalAddRef() const;
설명
이 메서드는 보호됩니다.
ComPtr::InternalRelease
이 ComPtr인터페이스와 연결된 인터페이스에서 COM 릴리스 작업을 수행합니다.
unsigned long InternalRelease();
설명
이 메서드는 보호됩니다.
ComPtr::operator&
이 ComPtr 개체와 연결된 인터페이스를 해제한 다음 개체의 ComPtr 주소를 검색합니다.
Details::ComPtrRef<WeakRef> operator&()
const Details::ComPtrRef<const WeakRef> operator&() const
Return Value
현재 ComPtr에 대한 약한 참조입니다.
설명
이 메서드는 ComPtr::GetAddressOf 인터페이스 포인터에 대한 참조를 해제한다는 점에서 다릅니다. 인터페이스 포인터의 주소가 필요하지만 해당 인터페이스를 해제하지 않으려는 경우에 사용합니다 ComPtr::GetAddressOf .
ComPtr::operator->
현재 템플릿 매개 변수에 지정된 형식에 대한 포인터를 검색합니다.
WRL_NOTHROW Microsoft::WRL::Details::RemoveIUnknown<InterfaceType>* operator->() const;
Return Value
현재 템플릿 형식 이름으로 지정된 형식에 대한 포인터입니다.
설명
이 도우미 함수는 STDMETHOD 매크로를 사용하여 발생하는 불필요한 오버헤드를 제거합니다. 이 함수는 IUnknownprivatevirtual.
ComPtr::operator=
현재 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
);
매개 변수
U
클래스입니다.
other
형식 또는 다른 ComPtr형식에 대한 포인터, 참조 또는 rvalue 참조입니다.
Return Value
현재 ComPtr.에 대한 참조입니다.
설명
이 연산자의 첫 번째 버전은 현재 ComPtr값에 빈 값을 할당합니다.
두 번째 버전에서 할당 인터페이스 포인터가 현재 ComPtr 인터페이스 포인터와 같지 않으면 두 번째 인터페이스 포인터가 현재 ComPtr인터페이스 포인터에 할당됩니다.
세 번째 버전에서는 할당 인터페이스 포인터가 현재 ComPtr에 할당됩니다.
네 번째 버전에서 할당 값의 인터페이스 포인터가 현재 ComPtr 인터페이스 포인터와 같지 않으면 두 번째 인터페이스 포인터가 현재 ComPtr인터페이스 포인터에 할당됩니다.
다섯 번째 버전은 복사 연산자입니다. 현재 ComPtr 에 대한 참조가 할당됩니다 ComPtr.
여섯 번째 버전은 이동 의미 체계를 사용하는 복사 연산자입니다. 형식이 정적 캐스트인 ComPtr 경우 현재에 할당되는 ComPtr경우 rvalue 참조입니다.
일곱 번째 버전은 이동 의미 체계를 사용하는 복사 연산자입니다. 형식 U 에 ComPtr 대한 rvalue 참조는 정적 캐스트이고 현재ComPtr에 할당됩니다.
ComPtr::operator==
두 ComPtr 개체가 같은지를 나타냅니다.
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
);
매개 변수
a
ComPtr 개체에 대한 참조입니다.
b
다른 ComPtr 개체에 대한 참조입니다.
Return Value
개체가 개체 ab와 같으면 첫 번째 연산자가 생성 true 되고, false그렇지 않으면 .
개체가 같nullptr으면 두 번째 및 세 번째 연산자가 생성 true 되고, false그렇지 a 않으면 .
ComPtr::operator!=
두 ComPtr 개체가 같지 않은지 여부를 나타냅니다.
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
);
매개 변수
a
ComPtr 개체에 대한 참조입니다.
b
다른 ComPtr 개체에 대한 참조입니다.
Return Value
개체가 개체와 같지 b않으면 첫 번째 연산자가 생성 true 됩니다. 그렇지 않으면 false.a
개체 a 가 같지 nullptr않으면 두 번째 및 세 번째 연산자가 생성 true 되고, false그렇지 않으면 .
ComPtr::operator Microsoft::WRL::Details::BoolType
인터페이스의 ComPtr 개체 수명을 관리하는지 여부를 나타냅니다.
WRL_NOTHROW operator Microsoft::WRL::Details::BoolType() const;
Return Value
인터페이스가 이 ComPtr인터페이스와 연결되어 있으면 데이터 멤버의 BoolStruct::Member 주소이고, nullptr그렇지 않으면 .
ComPtr::ptr_
연결되고 이 ComPtr인터페이스에 의해 관리되는 인터페이스에 대한 포인터를 포함합니다.
InterfaceType *ptr_;
설명
ptr_ 는 보호된 내부 데이터 멤버입니다.
ComPtr::ReleaseAndGetAddressOf
이와 ComPtr 연결된 인터페이스를 해제한 다음 릴리스된 인터페이스에 ptr_ 대한 포인터를 포함하는 데이터 멤버의 주소를 검색합니다.
T** ReleaseAndGetAddressOf();
Return Value
이 ComPtr데이터 멤버의 ptr_ 주소입니다.
ComPtr::Reset
이와 ComPtr 연결된 인터페이스를 해제하고 새 참조 수를 반환합니다.
unsigned long Reset();
Return Value
기본 인터페이스에 남아 있는 참조 수(있는 경우)입니다.
ComPtr::Swap
현재 ComPtr 에서 관리하는 인터페이스를 지정된 인터페이스에서 관리하는 인터페이스와 교환합니다 ComPtr.
void Swap(
_Inout_ ComPtr&& r
);
void Swap(
_Inout_ ComPtr& r
);
매개 변수
r
ComPtr