다음을 통해 공유


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에는 동작 변경 AsAsIIDCopyTo 메서드가 있습니다. 이전에는 이러한 메서드를 호출한 후 다음 코드와 같이 강력한 참조를 성공적으로 가져왔는지 확인하기 위해 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!");
}

상속 계층

ComPtr
 └ WeakRef

요구 사항

머리글: 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 로 설정된 nullptrHRESULT입니다.

  • 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 로 설정된 nullptrHRESULT입니다.

  • 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& 는 코드에서 사용할 수 없는 내부 도우미 연산자입니다.