1.在構(gòu)造函數(shù)中把引用計數(shù)初始化為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(),, 如果沒找到,進(jìn)行自刪除
return hr;
}
2.在構(gòu)造函數(shù)中把引用計數(shù)初始化為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內(nèi)部實現(xiàn),,與外部使用者無關(guān)...也就是說使用完全一樣