다음을 통해 공유


winrt::com_ptr 구조체 템플릿(C++/WinRT)

참조 계산 COM 스마트 포인터 템플릿입니다. com_ptr 템플릿 매개 변수로 지정된 인터페이스 또는 런타임 클래스 구현 형식에 대한 포인터를 나타냅니다. 프라이빗 원시 포인터를 통해 대상에 대한 참조 수를 자동으로 관리합니다.

통사론

template <typename T>
struct com_ptr

템플릿 매개 변수

typename T com_ptr나타내는 포인터인 인터페이스 또는 런타임 클래스 구현 형식입니다. 스마트 포인터 대상의 형식입니다.

요구 사항

지원되는 최소 SDK: Windows SDK 버전 10.0.17134.0(Windows 10 버전 1803)

Namespace: 윈트

헤더: %WindowsSdkDir%Include<WindowsTargetPlatformVersion>\cppwinrt\winrt\base.h(기본적으로 포함)

멤버 형식 별칭

별칭 이름
com_ptr::type typename T 템플릿 매개 변수의 구현 정의 표현의 동의어입니다.

생성자

생성자 묘사
com_ptr::com_ptr 생성자 필요에 따라 입력 데이터의 복사 또는 이동을 사용하여 com_ptr 구조체의 새 인스턴스를 초기화합니다.

멤버 함수

기능 묘사
com_ptr::as 함수 지원되는 경우 요청된 인터페이스를 반환합니다. 그렇지 않으면 throw합니다.
com_ptr::attach 함수 대상에 대한 참조를 소유하는 원시 포인터에 연결합니다. 추가 참조가 추가되지 않습니다.
com_ptr::capture 함수 지정된 함수 또는 메서드(winrt::check_hresult 자동으로 호출)를 호출하고 함수 또는 메서드에서 출력되는 인터페이스 포인터를 캡처합니다.
com_ptr::copy_from 함수 다른 포인터에서 복사합니다. 현재 참조된 인터페이스 또는 개체에 대한 참조 수를 감소시키고, 원시 포인터 매개 변수를 복사하고, 이 매개 변수가 가리키는 인터페이스 또는 개체의 수명 관리를 시작합니다.
com_ptr::copy_to 함수 com_ptr 개체에서 다른 포인터로 복사합니다. 현재 참조된 인터페이스 또는 개체에 대한 참조 횟수를 증가시키고 해당 인터페이스 또는 개체의 메모리 주소를 매개 변수에 복사합니다.
com_ptr::d etach 함수 참조된 인터페이스 또는 개체를 참조 횟수 감소 없이 분리하여 호출자에게 반환할 수 있습니다.
com_ptr::get 함수 함수에 전달해야 하는 경우 기본 원시 포인터를 반환합니다.
com_ptr::p ut 함수 기본 원시 포인터의 주소를 반환합니다. 이 함수는 포인터에 대한 포인터를 통해 참조를 out 매개 변수로 반환하는 메서드(예: COM 메서드)를 호출하는 데 도움이 됩니다.
com_ptr::p ut_void 함수 기본 원시 포인터의 주소를 void; 포인터에 대한 포인터로 반환합니다. 이 함수는 void대한 포인터를 통해 참조를 out 매개 변수로 반환하는 메서드(예: COM 메서드)를 호출하는 데 도움이 됩니다.
com_ptr::try_as 함수 지원되는 경우 요청된 인터페이스를 반환합니다. nullptr반환하거나 그렇지 않으면 false반환합니다.
com_ptr::try_capture 함수 실패를 throw하지 않고 성공하면 true 반환하거나 그렇지 않은 경우 false 반환하는 com_ptr::capture 버전입니다.

멤버 연산자

연산자 묘사
com_ptr::operator bool 스마트 포인터가 인터페이스 또는 개체를 참조하는지 여부를 확인합니다.
com_ptr::operator*(간접 참조 연산자) 대상 형식 T대한 참조를 예상하는 함수에 전달할 수 있도록 com_ptr대상에 대한 참조를 반환합니다.
com_ptr::operator=(대입 연산자) com_ptr 개체에 값을 할당합니다.
com_ptr::operator->(화살표 연산자) 참조된 인터페이스 또는 개체의 메서드에 대한 액세스 권한을 부여하려면 기본 원시 포인터를 반환합니다.

Free 함수

기능 묘사
attach_abi 함수 대상에 대한 참조를 소유하는 원시 포인터에 com_ptr 개체를 연결합니다. 추가 참조가 추가되지 않습니다.
detach_abi 함수 참조 수를 줄이지 않고 원시 인터페이스에서 com_ptr 개체를 분리하여 호출자에게 반환할 수 있습니다.
스왑 함수 com_ptr 매개 변수의 내용을 서로의 대상을 가리키도록 바꿉니다.

무료 연산자

기능 묘사
연산자!= (같지 않음 연산자) 두 매개 변수가 서로 다른 대상을 참조하는지 여부를 나타내는 값을 반환합니다.
연산자<(연산자보다 작음) 첫 번째 매개 변수의 대상이 두 번째 매개 변수의 대상보다 메모리에서 일찍 발생하는지 여부를 나타내는 값을 반환합니다.
연산자<= (보다 작거나 같음 연산자) 첫 번째 매개 변수의 대상이 두 번째 매개 변수의 대상보다 이전 메모리에서 발생하는지 또는 동일한 위치에서 발생하는지 여부를 나타내는 값을 반환합니다.
operator==(같음 연산자) 두 매개 변수가 동일한 인터페이스 및/또는 개체를 참조하는지 여부를 나타내는 값을 반환합니다.
연산자>(보다 큼 연산자) 첫 번째 매개 변수의 대상이 두 번째 매개 변수의 대상보다 나중에 메모리에서 발생하는지 여부를 나타내는 값을 반환합니다.
연산자>= (보다 크거나 같음 연산자) 첫 번째 매개 변수의 대상이 두 번째 매개 변수의 대상보다 나중에 메모리에서 발생하는지 또는 동일한 위치에서 발생하는지 여부를 나타내는 값을 반환합니다.

com_ptr::com_ptr 생성자

필요에 따라 입력 데이터의 복사 또는 이동을 사용하여 com_ptr 구조체의 새 인스턴스를 초기화합니다.

void* 생성자는 T*를 사용하고 소유권을 가정합니다. winrt::take_ownership_from_abi_t 이 포인터를 해제할 책임이 com_ptr전송되는 명시적인 마커 형식입니다. refcount가 정확히 1일 필요는 없습니다. 그것은 단지 책임이 이전되고 있다고 말하는 것입니다.

통사론

com_ptr(winrt::com_ptr const& other) noexcept;
com_ptr(std::nullptr_t = nullptr) noexcept;
com_ptr(void* ptr, winrt::take_ownership_from_abi_t) noexcept;
template <typename U> com_ptr(winrt::com_ptr<U> const& other) noexcept;
template <typename U> com_ptr(winrt::com_ptr<U>&& other) noexcept;

템플릿 매개 변수

typename U 입력 스마트 포인터가 가리키는 대상 형식입니다.

매개 변수

other com_ptr 개체를 초기화하는 다른 com_ptr. 매개 변수의 Tcom_ptr 개체의 T변환할 수 있어야 합니다.

com_ptr::as 함수

지원되는 경우 요청된 인터페이스를 반환합니다. 그렇지 않으면 throw합니다. 이 함수는 호출자에게 다시 전달할 필요가 없는 인터페이스를 쿼리하려는 경우에 유용합니다.

코드 예제는프로젝션된 형식 및 인터페이스를 인스턴스화 및 반환하는 섹션과 해당 항목의 다른 섹션을 참조하세요.

통사론

template <typename To> auto as() const;
template <typename To> void as(To& to) const;

템플릿 매개 변수

typename To 요청된 인터페이스의 형식입니다.

매개 변수

to 요청된 인터페이스를 받을 값에 대한 참조입니다.

반환 값

요청된 인터페이스를 참조하는 com_ptr 또는 요청된 인터페이스에 대한 강력한 형식의 스마트 포인터(C++/WinRT 또는 타사에서 선언됨)입니다.

com_ptr::attach 함수

대상에 대한 참조를 소유하는 원시 포인터에 연결합니다. 추가 참조가 추가되지 않습니다. 필요한 경우 이 함수를 사용하여 참조를 병합할 수 있습니다.

통사론

void attach(T* value) noexcept;

매개 변수

value 대상에 대한 참조를 소유하는 원시 포인터입니다.

com_ptr::capture 함수

지정된 함수 또는 메서드(winrt::check_hresult 자동으로 호출)를 호출하고 함수 또는 메서드에서 출력되는 인터페이스 포인터를 캡처합니다.

또한 winrt::capture 함수 템플릿참조하세요.

통사론

template <typename F, typename...Args>
void capture(F function, Args&&...args);

template <typename O, typename M, typename...Args>
void capture(O* p, M method, Args&& ...args);

template <typename O, typename M, typename...Args>
void capture(winrt::com_ptr<O> const& object, M method, Args&&...args);

템플릿 매개 변수

typename F 자유 함수 또는 std::function같은 함수 개체 형식입니다.

typename O 인터페이스 형식입니다.

typename M 메서드 형식입니다.

typename Args 0개 이상의 인수 형식입니다.

매개 변수

function F형식의 함수 개체입니다.

p O형식의 개체에 대한 포인터입니다.

object O형식의 winrt::com_ptr.

method M형식의 메서드(O구현)입니다.

args 형식 Args0개 이상의 인수입니다.

발언

  • capture(F function, Args&&...args) 오버로드는 함수 개체를 호출합니다.
  • capture(O* p, M method, Args&& ...args) 오버로드는 포인터에서 메서드를 호출합니다.
  • capture(winrt::com_ptr<O> const& object, M method, Args&&...args) 오버로드는 개체에서 메서드를 호출합니다.

모든 오버로드는 사용자가 제공하는 추가 인수를 통해(호출자에게) 전달됩니다. 또한 모든 오버로드는 이러한 호출에 필요한 두 개의 추가 인수, 특히 REFIID(winrt::com_ptr대상의 ID) 및 void**(winrt::com_ptr대상에 대한 포인터의 주소)를 전달합니다.

본보기

winrt::com_ptr<IDXGIAdapter> adapter
...
winrt::com_ptr<IDXGIFactory2> factory;
factory.capture(adapter, &IDXGIAdapter::GetParent);

com_ptr::copy_from 함수

다른 포인터에서 복사합니다. 현재 참조된 인터페이스 또는 개체에 대한 참조 수를 감소시키고, 원시 포인터 매개 변수를 복사하고, 이 매개 변수가 가리키는 인터페이스 또는 개체의 수명 관리를 시작합니다.

통사론

void copy_from(T* other) noexcept;

매개 변수

other com_ptr 개체에서 수명을 관리해야 하는 대상에 대한 원시 포인터입니다.

com_ptr::copy_to 함수

com_ptr 개체에서 다른 포인터로 복사합니다. 현재 참조된 인터페이스 또는 개체에 대한 참조 횟수를 증가시키고 해당 인터페이스 또는 개체의 메모리 주소를 매개 변수에 복사합니다. 이 함수를 사용하면 QueryInterface호출하지 않고도 동일한 인터페이스에 대한 참조를 전달할 수 있습니다.

통사론

void copy_to(T** other) const noexcept;

매개 변수

other 원시 포인터의 주소입니다. com_ptr 개체의 대상에 대한 포인터를 복사할 대상입니다.

com_ptr::d etach 함수

참조된 인터페이스 또는 개체를 참조 횟수 감소 없이 분리하여 호출자에게 반환할 수 있습니다.

통사론

T* detach() noexcept;

반환 값

com_ptr 개체에서 참조하는 인터페이스 또는 개체에 대한 포인터입니다.

com_ptr::get 함수

함수에 전달해야 하는 경우 기본 원시 포인터를 반환합니다. 반환된 포인터에서 AddRef, Release또는 queryInterface 호출할 수 있습니다.

통사론

T* get() const noexcept;

반환 값

com_ptr 개체에서 참조하는 인터페이스 또는 개체에 대한 포인터입니다.

com_ptr::p ut 함수

기본 원시 포인터의 주소를 반환합니다. 이 함수는 포인터에 대한 포인터를 통해 참조를 out 매개 변수로 반환하는 메서드(예: COM 메서드)를 호출하는 데 도움이 됩니다. com_ptr 개체에 이미 대상이 있는 경우 이 함수를 호출하기 전에 com_ptr 개체에 nullptr 할당합니다. 그렇지 않으면 함수가 어설션됩니다.

통사론

T** put() noexcept;

반환 값

기본 원시 포인터의 주소입니다.

com_ptr::p ut_void 함수

기본 원시 포인터의 주소를 void; 포인터에 대한 포인터로 반환합니다. 이 함수는 void대한 포인터를 통해 참조를 out 매개 변수로 반환하는 메서드(예: COM 메서드)를 호출하는 데 도움이 됩니다. com_ptr 개체에 이미 대상이 있는 경우 이 함수를 호출하기 전에 com_ptr 개체에 nullptr 할당합니다. 그렇지 않으면 함수가 어설션됩니다.

통사론

void** put_void() noexcept;

반환 값

void대한 포인터에 대한 포인터로서 기본 원시 포인터의 주소입니다.

com_ptr::try_as 함수

지원되는 경우 요청된 인터페이스를 반환합니다. 그렇지 않은 경우 nullptr(auto반환 오버로드) 또는 false(bool반환 오버로드)를 반환합니다. 이 함수는 호출자에게 다시 전달할 필요가 없는 인터페이스를 쿼리하려는 경우에 유용합니다.

통사론

template <typename To> auto try_as() const noexcept;
template <typename To> bool try_as(To& to) const noexcept;

템플릿 매개 변수

typename To 요청된 인터페이스의 형식입니다.

매개 변수

to 요청된 인터페이스를 받을 값에 대한 참조입니다.

반환 값

요청된 인터페이스를 참조하는 com_ptr 또는 요청된 인터페이스(C++/WinRT 또는 타사에 의해 선언됨)에 대한 강력한 형식의 스마트 포인터이며, 요청된 인터페이스가 지원되는 경우 nullptr(auto반환 오버로드) 또는 false(bool반환 오버로드)입니다.

com_ptr::try_capture 함수

실패를 throw하지 않고 성공하면 true 반환하거나 그렇지 않은 경우 false 반환하는 com_ptr::capture 버전입니다.

또한 winrt::try_capture 함수 템플릿참조하세요.

com_ptr::operator bool

스마트 포인터가 인터페이스 또는 개체를 참조하는지 여부를 확인합니다. 스마트 포인터가 인터페이스 또는 개체를 참조하지 않는 경우 논리적으로 null입니다. 그렇지 않으면 논리적으로 null이 아닙니다.

통사론

explicit operator bool() const noexcept;

반환 값

스마트 포인터가 인터페이스 또는 개체를 참조하는 경우(논리적으로 null이 아님) true, 그렇지 않으면 false(논리적으로 null)입니다.

com_ptr::operator*(간접 참조 연산자)

대상 형식 T대한 참조를 예상하는 함수에 전달할 수 있도록 com_ptr대상에 대한 참조를 반환합니다.

통사론

T& operator*() const noexcept;

반환 값

com_ptr대상에 대한 참조입니다.

com_ptr::operator=(대입 연산자)

com_ptr 개체에 값을 할당합니다.

통사론

winrt::com_ptr& operator=(winrt::com_ptr const& other) noexcept;
template <typename U> winrt::com_ptr& operator=(winrt::com_ptr<U> const& other) noexcept;
template <typename U> winrt::com_ptr& operator=(winrt::com_ptr<U>&& other) noexcept;

템플릿 매개 변수

typename U 할당되는 값이 가리키는 형식입니다.

매개 변수

com_ptr 개체에 할당할 com_ptr 값을 other. 매개 변수의 Tcom_ptr 개체의 T변환할 수 있어야 합니다.

반환 값

com_ptr 개체에 대한 참조입니다.

com_ptr::operator->(화살표 연산자)

참조된 인터페이스 또는 개체의 메서드에 대한 액세스 권한을 부여하려면 기본 원시 포인터를 반환합니다. 반환된 포인터에서 AddRef 또는 Release 호출할 수 없지만 QueryInterface호출할 수 있습니다.

통사론

auto operator->() const noexcept;

반환 값

com_ptr 개체에서 참조하는 인터페이스 또는 개체에 대한 포인터입니다.

attach_abi 함수

대상에 대한 참조를 소유하는 원시 포인터에 com_ptr 개체를 연결합니다. 추가 참조가 추가되지 않습니다. 필요한 경우 이 함수를 사용하여 참조를 병합할 수 있습니다.

통사론

void attach_abi(winrt::com_ptr<T>& object, T* value) noexcept;

매개 변수

object 작업할 com_ptr 개체입니다.

value 대상에 대한 참조를 소유하는 원시 포인터입니다.

detach_abi 함수

참조 수를 줄이지 않고 원시 인터페이스에서 com_ptr 개체를 분리하여 호출자에게 반환할 수 있습니다.

통사론

auto detach_abi(winrt::com_ptr<T>& object) noexcept;

매개 변수

object 작업할 com_ptr 개체입니다.

반환 값

com_ptr 개체에서 참조하는 원시 인터페이스에 대한 포인터입니다.

operator!= (같지 않음 연산자)

두 매개 변수가 서로 다른 대상을 참조하는지 여부를 나타내는 값을 반환합니다.

통사론

template <typename T> bool operator!=(winrt::com_ptr<T> const& left, winrt::com_ptr<T> const& right) noexcept;
template <typename T> bool operator!=(winrt::com_ptr<T> const& left, std::nullptr_t) noexcept;
template <typename T> bool operator!=(std::nullptr_t, winrt::com_ptr<T> const& right) noexcept;

매개 변수

left right 대상의 메모리 주소가 다른 매개 변수의 메모리 주소와 비교할 com_ptr 값입니다.

반환 값

두 매개 변수가 서로 다른 대상을 가리키면 true, 그렇지 않으면 false.

연산자<(보다 작음 연산자)

첫 번째 매개 변수의 대상이 두 번째 매개 변수의 대상보다 메모리에서 일찍 발생하는지 여부를 나타내는 값을 반환합니다.

통사론

template <typename T> bool operator<(winrt::com_ptr<T> const& left, winrt::com_ptr<T> const& right) noexcept;

매개 변수

left right 대상의 메모리 주소가 다른 매개 변수의 메모리 주소와 비교할 com_ptr 값입니다.

반환 값

true 첫 번째 매개 변수의 대상 메모리 주소가 두 번째 매개 변수의 메모리 주소보다 작으면 false.

operator<= (less-than-or-equal-to 연산자)

첫 번째 매개 변수의 대상이 두 번째 매개 변수의 대상보다 이전 메모리에서 발생하는지 또는 동일한 위치에서 발생하는지 여부를 나타내는 값을 반환합니다.

통사론

template <typename T> bool operator<=(winrt::com_ptr<T> const& left, winrt::com_ptr<T> const& right) noexcept;

매개 변수

left right 대상의 메모리 주소가 다른 매개 변수의 메모리 주소와 비교할 com_ptr 값입니다.

반환 값

true 첫 번째 매개 변수의 대상 메모리 주소가 두 번째 매개 변수의 메모리 주소보다 작거나 같으면 false.

operator==(같음 연산자)

두 매개 변수가 동일한 인터페이스 및/또는 개체를 참조하는지 여부를 나타내는 값을 반환합니다.

통사론

template <typename T> bool operator==(winrt::com_ptr<T> const& left, std::nullptr_t) noexcept;
template <typename T> bool operator==(std::nullptr_t, winrt::com_ptr<T> const& right) noexcept;

매개 변수

left right 대상의 메모리 주소가 다른 매개 변수의 메모리 주소와 비교할 com_ptr 값입니다.

반환 값

두 매개 변수가 동일한 대상을 가리키면 true, 그렇지 않으면 false.

연산자>(보다 큼 연산자)

첫 번째 매개 변수의 대상이 두 번째 매개 변수의 대상보다 나중에 메모리에서 발생하는지 여부를 나타내는 값을 반환합니다.

통사론

template <typename T> bool operator>(winrt::com_ptr<T> const& left, winrt::com_ptr<T> const& right) noexcept;

매개 변수

left right 대상의 메모리 주소가 다른 매개 변수의 메모리 주소와 비교할 com_ptr 값입니다.

반환 값

첫 번째 매개 변수의 대상 메모리 주소가 두 번째 매개 변수의 메모리 주소보다 크면 true, 그렇지 않으면 false.

operator>= (greater-than-or-equal-to 연산자)

첫 번째 매개 변수의 대상이 두 번째 매개 변수의 대상보다 나중에 메모리에서 발생하는지 또는 동일한 위치에서 발생하는지 여부를 나타내는 값을 반환합니다.

통사론

template <typename T> bool operator>=(winrt::com_ptr<T> const& left, winrt::com_ptr<T> const& right) noexcept;

매개 변수

left right 대상의 메모리 주소가 다른 매개 변수의 메모리 주소와 비교할 com_ptr 값입니다.

반환 값

첫 번째 매개 변수의 대상 메모리 주소가 두 번째 매개 변수의 메모리 주소보다 크거나 같은지 true, 그렇지 않으면 false.

swap 함수

com_ptr 매개 변수의 내용을 서로의 대상을 가리키도록 바꿉니다.

통사론

void swap(winrt::com_ptr& left, winrt::com_ptr& right) noexcept;

매개 변수

left right 포인터가 다른 매개 변수의 포인터와 상호 교환되는 com_ptr 값입니다.

참고 항목

  • winrt 네임스페이스
  • C++/WinRT API 사용