다음을 통해 공유


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.