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
개체를 참조해서는 안됩니다.
설명
첫 번째 템플릿은 코드에서 사용해야 하는 폼입니다. 두 번째 템플릿은 내부 도우미 전문화입니다. 형식 추론 키워드와 같은 auto
C++ 언어 기능을 지원합니다.
Return Value
S_OK
성공하면
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
성공하면
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
성공하면 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 매크로를 사용하여 발생하는 불필요한 오버헤드를 제거합니다. 이 함수는 IUnknown
private
virtual
.
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
개체가 개체 a
b
와 같으면 첫 번째 연산자가 생성 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
개체가 개체 a
b
와 같지 않으면 첫 번째 연산자가 생성 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
.