2011-05-20 25 views

回答

2

它的工作原理完全一樣......託管代碼無法訪問的對象符合垃圾回收的條件,因此如果您的非託管代碼依賴於託管資源繼續存在,則必須在c#方的某處持有對其的引用的應用程序。

編輯:適用於非託管C++

+0

假設我有一個場景,其中我的託管C++代碼調用該方法返回一個數組或anobject(即我假設對象的內存將在託管堆中分配)C#類服務器。現在我懷疑這個C#對象memroy是如何被C++代碼使用的 – sqlnewbie 2011-05-20 11:43:22

+0

正如yaur所說的,就像從C#類一樣。 C++代碼h會將它們封裝在一個託管指針中,以通知GC。這些指針,只要存在,就算作參考並停止垃圾收集。這曾經是一個GcRoot模板。現在它更加透明,但方法是一樣的。 – TomTom 2011-05-20 11:58:45

+0

我不認爲我遇到過,我不得不從c#返回一個數組到C++。你將不得不將它列入非託管內存或固定數組,這意味着你將不得不做一些工作來避免內存泄漏。 C++/cli(你稱之爲managed-C++)稍微直截了當是因爲它處理了大量的幕後編組工作,IIRC從你的C++/cli程序集的管理位完全相同,就好像它是c#和複雜的部分在該組件的管理和非管理部分之間。 – Yaur 2011-05-20 12:09:56

0

託管C++使用普通的垃圾收集器。