ComPtr 클래스

템플릿 매개 변수로 지정된 인터페이스를 나타내는 스마트 포인터 형식을 만듭니다. ComPtr은 기본 인터페이스 포인터의 참조 개수를 자동으로 관리하여 참조 횟수가 0이 되면 인터페이스를 릴리스합니다.

구문

template <typename T>
class ComPtr;

template<class U>
friend class ComPtr;

매개 변수

T
나타내는 ComPtr 인터페이스입니다.

U
현재 ComPtr 친구가 되는 클래스입니다. 이 매개 변수를 사용하는 템플릿은 보호됩니다.

설명

ComPtr<> 는 기본 인터페이스 포인터를 나타내는 형식을 선언합니다. 변수를 선언한 다음 화살표 멤버 액세스 연산자(->)를 사용하여 인터페이스 멤버 함수에 액세스하는 데 사용합니다ComPtr<>.

스마트 포인터에 대한 자세한 내용은 COM 코딩 사례 문서의 "COM 스마트 포인터" 하위 섹션 을 참조하세요 .

멤버

공용 Typedefs

이름 설명
InterfaceType T 템플릿 매개 변수로 지정된 형식의 동의어입니다.

공용 생성자

속성 설명
ComPtr::ComPtr ComPtr 클래스의 새 인스턴스를 초기화합니다. 오버로드는 기본, 복사, 이동 및 변환 생성자를 제공합니다.
ComPtr::~ComPtr 인스턴스를 초기화합니다 ComPtr.

공용 메서드

이름 설명
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.

보호된 메서드

속성 설명
ComPtr::InternalAddRef ComPtr인터페이스와 연결된 인터페이스의 참조 수를 증분합니다.
ComPtr::InternalRelease ComPtr인터페이스와 연결된 인터페이스에서 COM 릴리스 작업을 수행합니다.

Public 연산자

이름 설명
ComPtr::operator& 현재 ComPtr주소를 검색합니다.
ComPtr::operator-> 현재 템플릿 매개 변수에 지정된 형식에 대한 포인터를 검색합니다.
ComPtr::operator= 현재 ComPtr값에 값을 할당합니다.
ComPtr::operator== ComPtr 개체가 같은지를 나타냅니다.
ComPtr::operator!= ComPtr 개체가 같지 않은지 여부를 나타냅니다.
ComPtr::operator Microsoft::WRL::Details::BoolType 인터페이스의 ComPtr 개체 수명을 관리하는지 여부를 나타냅니다.

보호된 데이터 멤버

이름 설명
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 개체를 참조해서는 안됩니다.

설명

첫 번째 템플릿은 코드에서 사용해야 하는 폼입니다. 두 번째 템플릿은 내부 도우미 전문화입니다. 형식 추론 키워드(keyword) 같은 auto C++ 언어 기능을 지원합니다.

Return Value

S_OK 성공하면 HRESULT 오류를 나타내는 것입니다.

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 성공하면 HRESULT 오류를 나타내는 것입니다.

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 형식의 개체입니다.

Return Value

설명

첫 번째 생성자는 빈 개체를 암시적으로 만드는 기본 생성자입니다. 두 번째 생성자는 빈 개체를 명시적으로 만드는 지정 __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 성공하면 HRESULT 암시적 QueryInterface 작업이 실패한 이유를 나타내는 것입니다.

설명

첫 번째 함수는 이 ComPtr함수와 연결된 인터페이스에 대한 포인터의 복사본을 반환합니다. 이 함수는 항상 S_OK.

두 번째 함수는 매개 변수로 지정된 인터페이스에 대해 이와 ComPtr 연결된 인터페이스에 riid 대해 작업을 수행 QueryInterface 합니다.

세 번째 함수는 매개 변수의 기본 인터페이스에 대해 이와 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 참조입니다.

일곱 번째 버전은 이동 의미 체계를 사용하는 복사 연산자입니다. 형식 UComPtr 대한 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그렇지 않으면 .

개체 a 가 같nullptr으면 두 번째 연산자와 세 번째 연산자가 생성 true 되고, false그렇지 않으면 .

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.

개체 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.