클래식 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& |
현재 ComPtrRef 개체를 WeakRef 나타내는 개체를 반환합니다. |
설명
WeakRef 개체는 개체와 연결된 강력한 참조를 유지 관리하며 유효하거나 유효하지 않을 수 있습니다. 강력한 참조를 As() 얻으려면 또는 AsIID() 메서드를 호출합니다. 강력한 참조가 유효한 경우 연결된 개체에 액세스할 수 있습니다. 강력한 참조가 올바르지 않은 경우(nullptr) 연결된 개체에 액세스할 수 없습니다.
WeakRef 개체는 일반적으로 해당 존재가 외부 스레드 또는 애플리케이션에 의해 제어되는 개체를 나타내는 데 사용됩니다. 예를 들어 파일 개체에 WeakRef 대한 참조에서 개체를 생성합니다. 파일이 열려 있는 동안 강력한 참조는 유효합니다. 그러나 파일이 닫히면 강력한 참조는 유효하지 않게 됩니다.
Windows SDK에는 동작 변경 AsAsIID및 CopyTo 메서드가 있습니다. 이전에는 이러한 메서드를 호출한 후 다음 코드와 같이 강력한 참조를 성공적으로 가져왔는지 확인하기 위해 for WeakRef 를 확인할 nullptr 수 있었습니다.
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 개체를 초기화합니다. 두 번째 생성자는 포인터 WeakRef 에서 인터페이스로 IWeakReference 개체를 초기화합니다. 세 번째 생성자는 개체에 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로 설정된nullptrHRESULT입니다.S_OK이 작업이 성공했지만 현재WeakRef개체가 이미 릴리스되었으면 입니다.ptr매개 변수가nullptr로 설정됩니다.S_OK이 작업이 성공하지만 현재WeakRef개체가 매개 변수U에서 파생되지 않은 경우 .ptr매개 변수가nullptr로 설정됩니다.
설명
매개 변수 UIWeakReference가 이거나 에서 파생되지 않은 경우 오류가 발생합니다 IInspectable.
첫 번째 템플릿은 코드에서 사용해야 하는 폼입니다. 두 번째 템플릿은 내부 도우미 전문화입니다. 형식 추론 키워드와 같은 auto C++ 언어 기능을 지원합니다.
Windows 10 SDK부터 이 메서드는 약한 참조를 가져올 수 없는 경우 인스턴스를 WeakRef 설정 nullptr 하지 않으므로 이를 확인하는 WeakRefnullptr오류 검사 코드를 피해야 합니다. 대신 ptr에서 ptr을 확인합니다nullptr.
WeakRef::AsIID
지정된 인터페이스 ID를 나타내는 지정된 ComPtr 포인터 매개 변수를 설정합니다.
HRESULT AsIID(
REFIID riid,
_Out_ ComPtr<IInspectable>* ptr
);
매개 변수
riid
인터페이스 ID입니다.
ptr
이 작업이 완료되었을 때 riid매개 변수를 나타내는 개체입니다.
반환 값
S_OK이 작업이 성공하면 이고, 그렇지 않으면 작업이 실패한 이유를 나타내고ptr로 설정된nullptrHRESULT입니다.S_OK이 작업이 성공했지만 현재WeakRef개체가 이미 릴리스되었으면 입니다.ptr매개 변수가nullptr로 설정됩니다.S_OK이 작업이 성공하지만 현재WeakRef개체가 매개 변수riid에서 파생되지 않은 경우 .ptr매개 변수가nullptr로 설정됩니다. 자세한 내용은 설명 부분을 참조하세요.
설명
매개 변수 riid 가 .에서 IInspectable파생되지 않은 경우 오류가 발생합니다. 이 오류는 반환 값을 대체합니다.
첫 번째 템플릿은 코드에서 사용해야 하는 폼입니다. 두 번째 템플릿(여기에 표시되지 않지만 헤더 파일에 선언됨)은 형식 추론 키워드와 같은 auto C++ 언어 기능을 지원하는 내부 도우미 특수화입니다.
Windows 10 SDK부터 이 메서드는 약한 참조를 가져올 수 없는 경우 인스턴스를 WeakRef 설정 nullptr 하지 않으므로 이를 확인하는 WeakRefnullptr오류 검사 코드를 피해야 합니다. 대신 .ptrnullptr
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
또는 IInspectable에 대한 이중 간접 포인터 IWeakReference 입니다.
반환 값
S_OK 성공하면
설명
반환 값 S_OK 은 이 작업이 성공했음을 의미하지만 약한 참조가 강력한 참조로 확인되었는지 여부는 나타내지 않습니다. 반환되는 경우 S_OK 해당 매개 변수 ptr 가 강력한 참조인지 테스트합니다. 즉, 매개 변수 ptr 가 같지 nullptr않습니다.
Windows 10 SDK부터 이 메서드는 약한 참조를 가져올 수 없는 경우 인스턴스를 WeakRef 설정 nullptr 하지 않으므로 이를 확인하는 WeakRefnullptr코드를 검사하는 오류를 방지해야 합니다. 대신 .ptrnullptr
WeakRef::operator&
현재 ComPtrRef 개체를 WeakRef 나타내는 개체를 반환합니다.
Details::ComPtrRef<WeakRef> operator&() throw()
반환 값
ComPtrRef 현재 WeakRef 개체를 나타내는 개체입니다.
설명
WeakRef::operator& 는 코드에서 사용할 수 없는 내부 도우미 연산자입니다.