IUnknown::QueryInterface()
을 C++에 구현할 때 포인터 조작이 포함 된 몇 가지주의 사항이 있습니다.QueryInterface() 구현 내에서 AddRef()를 직접 호출하지 않는 이유가 있습니까?
class CMyClass : public IInterface1, public IInterface2 {
};
//inside CMyClass::QueryInterface():
if(iid == __uuidof(IUnknown)) {
*ppv = static_cast<IInterface1*>(this); // upcast in order to properly adjust the pointer
//call Addref(), return S_OK
}
업 캐스팅에 대한 이유는 다중 상속 시나리오에서 매우 분명하다 : 예를 들어, 클래스는 여러 인터페이스 (다중 상속) explicit upcasts are necessary을 구현합니다. 그러나 여기에 모든과가 나는 또한 다음을 참조 :
static_cast<IUnknown*>(*ppv)->AddRef();
을 대신 단순히 QueryInterface()
구현 내부에서 AddRef()
를 호출.
ppv
에 이전에 복사 된 값의 캐스트를 현재 개체에서 AddRef()
대신 사용해야하는 이유가 있습니까?
IUnknown 클래스의 정의를 게시 할 수 있습니까? – mukeshkumar
@hype : 예. http://msdn.microsoft.com/en-us/library/ms680509(VS.85).aspx – sharptooth