我有一個unmanged類和其中Ar邏輯連接一個引用類:C++/CLI引用類沒有得到釋放
public ref class RefBlah
{
~RefBlah();
!RefBlah();
internal:
UnManagedBlah* m_unmanaged;
}
public class UnManagedBlah
{
public:
gcroot<RefBlah^> refBlah;
}
的RefBlah類總是創建的UnManagedBlah一個實例,其保持到參考創建它的對象。
現在,當我在C#應用程序中創建一個RefBlah的實例時,它在超出作用域時不會被釋放。 (我等待並看到所有其他對象被釋放,但它拒絕移除它自己)。
據我所知,如果它們都是常規的.Net對象,它們都會在類超出範圍時收集,因爲雖然引用計數不會達到0.而這是因爲沒有引用根來自主堆棧的對象。
.NET GC是否以不同方式處理來自非託管類的引用?
我該如何更改設計,以便RefBlah將被銷燬?
不錯,不知道你可以在C#中創建一個弱引用。有道理,他們會擁有它:) – 2011-05-24 08:42:11
循環引用不會影響.Net儘可能多。問題在於,因爲** UnManagedBlah **是非託管的,所以CLI在未經管理的代碼中引用它時不釋放引用的對象。但解決方案無論如何解決了這個問題。 – 2011-05-24 10:14:08