回答
每個人都持有一個引用的COM接口指針可以保證對象是活着的,因此如果不知道每個人都持有指向COM對象的接口指針,並且能夠請求釋放,則無法確保該對象被銷燬。
你當然可以嘗試
for(; ;)
{
if(pFoo->Release() == 0)
break;
}
然而,即使這樣,你(一)可以得到死循環,(B)的引用你的對象將獲得訪問衝突/不確定的行爲,一旦他們嘗試訪問銷燬的對象(他們仍然期望被引用的對象是活着的)。
另一種方法是使用包裝器對象並在內部管理實際的COM對象而不公開它。你將方法調用從包裝器轉發到內部對象。然後你可以要求你的包裝釋放內部引用,這通常會導致內部對象的破壞。
如何找出在VS 2010中保留COM對象的東西? –
有沒有辦法,這部分是輕量級的。 COM對象沒有看到/知道誰正在使用它。它只管理參考計數器,以便它知道何時不再使用,是時候自我毀滅。 –
SO調試很困難。正如我想創建(setUp)和銷燬(tearDown)對象進行測試,但不知道他們爲什麼不調用析構函數。並找出誰不打球的提示? –
- 1. OnSetActive()的「相反」是什麼?
- 2. 什麼是BatchBlock相反塊
- 3. Ruby的包括什麼是相反的?
- 4. 與evt.preventDefault()相反的是什麼?
- 5. 「格式」的相反之處是什麼?
- 6. 「git add」的相反命令是什麼?
- 7. SelectMany的相反之處是什麼?
- 8. 與void標籤相反的是什麼?
- 9. ETL的相反之處是什麼?
- 10. now.date.addDays的相反之處是什麼?
- 11. Notepad ++:什麼是JSFormat的「相反」格式?
- 12. jQuery`.get()`的相反之處是什麼?
- 13. 什麼是相反的JavaScript匹配()
- 14. 「Parser」的相反詞是什麼?
- 15. MATCH AGAINST的相反情況是什麼?
- 16. 202接受的相反是什麼?
- 17. 與hasFields相反的是什麼?
- 18. 繼承的相反部分是什麼?
- 19. TDD的相反之處是什麼?
- 20. tesselation的相反之處是什麼?
- 21. forceActiveFocus的相反之處是什麼?
- 22. 什麼是OutputStreamWriter的反轉
- 23. 與C#中的加密+壓縮代碼相反的是什麼?
- 24. 爲什麼fork()的返回值不是相反的方式?
- 25. Visual Studio 2010中的F7 - 什麼是相反的?
- 26. 與[sender resignFirstResponder]相反的是什麼? Objective-C的
- 27. E_ACCESSDENIED上的CoCreateInstance
- 28. IWICImagingFactory CoCreateInstance
- 29. 查詢生成器與()相反的是什麼?
- 30. PHP「list」問題:爲什麼結果是相反的?
您是否在尋找[IUnknown :: Release()](https://msdn.microsoft.com/en-us/library/windows/desktop/ms682317.aspx)? –
但是如何保證析構函數被調用來執行呢? –
另請參見:[你知道你的析構函數何時運行嗎?第1部分](http://blogs.msdn.com/b/oldnewthing/archive/2004/05/20/135841.aspx),[第2部分](http://blogs.msdn.com/b/oldnewthing/存檔/ 2004/05/21/136701.aspx)。 –