WeakRef
클래스
클래식 COM이 아닌 Windows 런타임에서만 사용할 수 있는 약한 참조 를 나타냅니다. 약한 참조는 액세스할 수 있거나 액세스할 수 없는 개체를 나타냅니다.
구문
class WeakRef : public ComPtr<IWeakReference>;
멤버
Public 생성자
속성 | 설명 |
---|---|
WeakRef::WeakRef 생성자 |
WeakRef 클래스의 새 인스턴스를 초기화합니다. |
WeakRef::~WeakRef 소멸자 |
클래스의 현재 인스턴스를 초기화합니다 WeakRef . |
공용 메서드
이름 | 설명 |
---|---|
WeakRef::As |
지정된 인터페이스를 나타내도록 지정된 ComPtr 포인터 매개 변수를 설정합니다. |
WeakRef::AsIID |
지정된 인터페이스 ID를 나타내는 지정된 ComPtr 포인터 매개 변수를 설정합니다. |
WeakRef::CopyTo |
사용 가능한 경우 지정된 포인터 변수에 인터페이스에 대한 포인터를 할당합니다. |
Public 연산자
속성 | 설명 |
---|---|
WeakRef::operator& |
현재 WeakRef 개체를 ComPtrRef 나타내는 개체를 반환합니다. |
설명
WeakRef
개체는 개체와 연결된 강력한 참조를 유지 관리하며 유효하거나 유효하지 않을 수 있습니다. 강력한 참조를 As()
얻으려면 또는 AsIID()
메서드를 호출합니다. 강력한 참조가 유효한 경우 연결된 개체에 액세스할 수 있습니다. 강력한 참조가 올바르지 않은 경우(nullptr
) 연결된 개체에 액세스할 수 없습니다.
WeakRef
개체는 일반적으로 해당 존재가 외부 스레드 또는 애플리케이션에 의해 제어되는 개체를 나타내는 데 사용됩니다. 예를 들어 파일 개체에 WeakRef
대한 참조에서 개체를 생성합니다. 파일이 열려 있는 동안 강력한 참조는 유효합니다. 그러나 파일이 닫히면 강력한 참조는 유효하지 않게 됩니다.
Windows SDK에는 동작 변경 As
AsIID
및 CopyTo
메서드가 있습니다. 이전에는 이러한 메서드를 호출한 후 다음 코드와 같이 강력한 참조를 성공적으로 가져왔는지 확인하기 위해 for nullptr
를 확인할 WeakRef
수 있었습니다.
WeakRef wr;
strongComptrRef.AsWeak(&wr);
// Now suppose that the object strongComPtrRef points to no longer exists
// and the following code tries to get a strong ref from the weak ref:
ComPtr<ISomeInterface> strongRef;
HRESULT hr = wr.As(&strongRef);
// This check won't work with the Windows 10 SDK version of the library.
// Check the input pointer instead.
if(wr == nullptr)
{
wprintf(L"Couldn't get strong ref!");
}
위의 코드는 Windows 10 SDK(이상)를 사용할 때 작동하지 않습니다. 대신에 대해 전달된 포인터를 확인합니다 nullptr
.
if (strongRef == nullptr)
{
wprintf(L"Couldn't get strong ref!");
}
상속 계층
요구 사항
머리글: client.h
네임스페이스: Microsoft::WRL
WeakRef::WeakRef
생성자
WeakRef
클래스의 새 인스턴스를 초기화합니다.
WeakRef();
WeakRef(
decltype(__nullptr)
);
WeakRef(
_In_opt_ IWeakReference* ptr
);
WeakRef(
const ComPtr<IWeakReference>& ptr
);
WeakRef(
const WeakRef& ptr
);
WeakRef(
_Inout_ WeakRef&& ptr
);
매개 변수
ptr
현재 WeakRef
개체를 초기화하는 기존 개체에 대한 포인터, 참조 또는 rvalue 참조입니다.
설명
첫 번째 생성자는 빈 WeakRef
개체를 초기화합니다. 두 번째 생성자는 포인터 IWeakReference
에서 인터페이스로 WeakRef
개체를 초기화합니다. 세 번째 생성자는 개체에 WeakRef
대한 참조에서 개체를 ComPtr<IWeakReference>
초기화합니다. 네 번째 및 다섯 번째 생성자는 다른 WeakRef
개체에서 개체를 WeakRef
초기화합니다.
WeakRef::~WeakRef
소멸자
클래스의 현재 인스턴스를 초기화합니다 WeakRef
.
~WeakRef();
WeakRef::As
지정된 인터페이스를 나타내도록 지정된 ComPtr
포인터 매개 변수를 설정합니다.
template<typename U>
HRESULT As(
_Out_ ComPtr<U>* ptr
);
template<typename U>
HRESULT As(
_Out_ Details::ComPtrRef<ComPtr<U>> ptr
);
매개 변수
U
인터페이스 ID입니다.
ptr
이 작업이 완료되면 매개 변수 U를 나타내는 개체입니다.
반환 값
S_OK
이 작업이 성공하면 이고, 그렇지 않으면 작업이 실패한 이유를 나타내고ptr
로 설정된nullptr
HRESULT입니다.S_OK
이 작업이 성공했지만 현재WeakRef
개체가 이미 릴리스되었으면 입니다.ptr
매개 변수가nullptr
로 설정됩니다.S_OK
이 작업이 성공하지만 현재WeakRef
개체가 매개 변수U
에서 파생되지 않은 경우 .ptr
매개 변수가nullptr
로 설정됩니다.
설명
매개 변수 U
IWeakReference
가 이거나 에서 파생되지 않은 경우 오류가 발생합니다 IInspectable
.
첫 번째 템플릿은 코드에서 사용해야 하는 폼입니다. 두 번째 템플릿은 내부 도우미 전문화입니다. 형식 추론 키워드와 같은 auto
C++ 언어 기능을 지원합니다.
Windows 10 SDK부터 이 메서드는 약한 참조를 가져올 수 없는 경우 인스턴스를 nullptr
설정 WeakRef
하지 않으므로 이를 확인하는 WeakRef
nullptr
오류 검사 코드를 피해야 합니다. 대신 ptr에서 ptr을 확인합니다nullptr
.
WeakRef::AsIID
지정된 인터페이스 ID를 나타내는 지정된 ComPtr
포인터 매개 변수를 설정합니다.
HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IInspectable>* ptr
);
매개 변수
riid
인터페이스 ID입니다.
ptr
이 작업이 완료되었을 때 riid
매개 변수를 나타내는 개체입니다.
반환 값
S_OK
이 작업이 성공하면 이고, 그렇지 않으면 작업이 실패한 이유를 나타내고ptr
로 설정된nullptr
HRESULT입니다.S_OK
이 작업이 성공했지만 현재WeakRef
개체가 이미 릴리스되었으면 입니다.ptr
매개 변수가nullptr
로 설정됩니다.S_OK
이 작업이 성공하지만 현재WeakRef
개체가 매개 변수riid
에서 파생되지 않은 경우 .ptr
매개 변수가nullptr
로 설정됩니다. 자세한 내용은 설명 부분을 참조하세요.
설명
매개 변수 riid
가 .에서 IInspectable
파생되지 않은 경우 오류가 발생합니다. 이 오류는 반환 값을 대체합니다.
첫 번째 템플릿은 코드에서 사용해야 하는 폼입니다. 두 번째 템플릿(여기에 표시되지 않지만 헤더 파일에 선언됨)은 형식 추론 키워드와 같은 auto
C++ 언어 기능을 지원하는 내부 도우미 특수화입니다.
Windows 10 SDK부터 이 메서드는 약한 참조를 가져올 수 없는 경우 인스턴스를 nullptr
설정 WeakRef
하지 않으므로 이를 확인하는 WeakRef
nullptr
오류 검사 코드를 피해야 합니다. 대신 .ptr
nullptr
WeakRef::CopyTo
사용 가능한 경우 지정된 포인터 변수에 인터페이스에 대한 포인터를 할당합니다.
HRESULT CopyTo(
REFIID riid,
_Deref_out_ IInspectable** ptr
);
template<typename U>
HRESULT CopyTo(
_Deref_out_ U** ptr
);
HRESULT CopyTo(
_Deref_out_ IWeakReference** ptr
);
매개 변수
U
인터페이스 포인터입니다 IInspectable
. 에서 파생되지 않은 경우 U
오류가 발생합니다 IInspectable
.
riid
인터페이스 ID입니다. 에서 파생되지 않은 경우 riid
오류가 발생합니다 IWeakReference
.
ptr
또는 IWeakReference
에 대한 이중 간접 포인터 IInspectable
입니다.
반환 값
S_OK
성공하면
설명
반환 값 S_OK
은 이 작업이 성공했음을 의미하지만 약한 참조가 강력한 참조로 확인되었는지 여부는 나타내지 않습니다. 반환되는 경우 S_OK
해당 매개 변수 ptr
가 강력한 참조인지 테스트합니다. 즉, 매개 변수 ptr
가 같지 nullptr
않습니다.
Windows 10 SDK부터 이 메서드는 약한 참조를 가져올 수 없는 경우 인스턴스를 nullptr
설정 WeakRef
하지 않으므로 이를 확인하는 WeakRef
nullptr
코드를 검사하는 오류를 방지해야 합니다. 대신 .ptr
nullptr
WeakRef::operator&
현재 WeakRef
개체를 ComPtrRef
나타내는 개체를 반환합니다.
Details::ComPtrRef<WeakRef> operator&() throw()
반환 값
ComPtrRef
현재 WeakRef
개체를 나타내는 개체입니다.
설명
WeakRef::operator&
는 코드에서 사용할 수 없는 내부 도우미 연산자입니다.