2011-09-02 133 views
1

在具有_com_ptr_t成員的C++類中,如果CreateInstance()在同一個指針上重複使用以獲取COM對象的新實例,而不首先執行Release(),是否會內存泄漏?有據可查的是,當這些智能指針之一超出範圍時ref ref會減少,並且封裝指針不是Detach()。當重複CreateInstance()時,MSDN似乎沒有提及ref ref的含義。在重新分配CreateInstance之前需要釋放com_ptr_t?

回答

5

由於_com_ptr_tCreateInstance()的開頭調用Release(),所以不會發生泄漏,您可以通過閱讀_com_ptr_t實現輕鬆驗證自己。

+0

感謝銳利。在Visual Studio IDE的源代碼中,我遇到了麻煩_com_ptr_t :: CreateInstance,大概是因爲它是一個模板。引用MSDN將comip.h標識爲感興趣的源文件。我花了一分鐘才意識到替代原型調用主版本(將CLSID作爲第一個參數),在做其他任何事情之前清楚地調用_Release()。再次感謝。 – fitz

0

在調用CoCreateInstance()之前,CreateInstance()調用 _Release()。請參閱裏面的實現。

相關問題