來自IUnknown-> Release()文檔的引用: 「對呼叫者的註釋 當您不再需要使用接口指針時調用此方法如果您正在編寫一個接受輸入輸出參數的方法,調用你在傳入的指針之前釋放它,然後複製它的頂部值。「正在釋放IDispatch指針
1.在下面的代碼中調用pDocument-> Release()後,@ rc變量等於1。我應該爲pDocument調用Release兩次嗎?
2.在哪種情況下IDispatch的計數增加?
3.當我將它作爲指針傳遞給我的函數時,IDispatch的引用計數是否增加?
4.我有幾十個IDispatch *對象,那麼如果我忘記Release()其中的任何一個呢?內存泄漏?
5.是否有任何簡單的方法可以發佈所有IDispatch *或者我只能手動發佈它們?
AutoWrap(DISPATCH_METHOD, &result.GetVARIANT(), pDocuments, TEXT("Close"), 1, saveChanges.GetVARIANT());
AutoWrap(DISPATCH_METHOD, &result.GetVARIANT(), pWApp, TEXT("Quit"), 0);
//Finalizing
if (pWApp)
{
pWApp->Release();
pWApp = NULL;
}
if (pDocuments)
{
ULONG rc = pDocuments->Release();
pDocuments = NULL;
}
if (pActiveDocument)
{
pActiveDocument->Release();
pActiveDocument = NULL;
}
IUnknown :: Release()函數具有返回值是一個設計錯誤。有用於調試,但在代碼中使用時非常致命。**永遠不會調用Release(),它會在你不知道的其他代碼有引用的情況下產生硬性崩潰,並在你殺死該對象後嘗試使用它。只有當你獲得一個接口指針並且不想再使用它時才調用它。 –
究竟是什麼意思「獲得一個接口指針?」來自哪裏?仍然沒有得到。 –
從某個函數或方法返回一個作爲[out]參數 - 例如'IUnknown :: QueryInterface'或'CoCreateInstance'。這樣的函數總是在返回指針前加上'AddRef',而調用者負責在完成它時釋放它。 –