1.在構造函數中把引用計數初始化為1
HRESULT _stdcall IClassFactory::CreateInstance(IUnknown * pUnkOuter,REFIID riid,void ** ppvObject)
{
pObject = new CObject();//此時m_dwRef為一
HRESULT hr = if(pObject) pObject->QueryInterface(riid, ppvObject);
pObject->Release(); //不管查找接口是否成功,都去release(),, 如果沒找到,進行自刪除
return hr;
}
2.在構造函數中把引用計數初始化為0
HRESULT CDictionaryFactory::CreateInstance(IUnknown *pUnknownOuter,
const IID& iid, void **ppv)
{
CDictionary * pObj = new CDictionary();;
HRESULT hr;
if (NULL==pObj)
return hr;
hr=pObj->QueryInterface(iid, ppv);
if (hr != S_OK) {
delete pObj; //如果沒找到對象直接刪除
}
兩種方法都是com內部實現,,與外部使用者無關...也就是說使用完全一樣