【发布时间】:2011-02-18 03:52:51
【问题描述】:
在 C++ 中实现 IUnknown::QueryInterface() 时,有几个关于指针操作的警告。比如当类实现了多个接口(多重继承)explicit upcasts are necessary:
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
}
upcast 的原因在多重继承场景中是很清楚的。然而,到处我也看到以下内容:
static_cast<IUnknown*>( *ppv )->AddRef();
而不是简单地从 QueryInterface() 实现内部调用 AddRef()。
有什么理由我应该对先前复制到ppv 的值进行强制转换,而不是仅仅在当前对象上调用AddRef()?
【问题讨论】:
-
可以发一下IUnknown类的定义吗?
标签: c++ visual-c++ com interop com-interop