2016-03-21 16 views
1

Yönetilen bir C# projesine döndürülen bir Windows Çalışma Zamanı Bileşeninde oluşturulan bir sınıftan bellek ayırmam gerekir mi?Çalışma zamanı bileşeninde oluşturulmuş C++ WinRT sınıflarının belleği nasıl oluşturulur

Bu soru How to free memory of c++ WinRT value structs

aşağıdaki senaryoda oluşur gibi yerine yapılar arasında Sınıfları ilgilendiren

  1. C++ \ Runtime bileşeni Yöntem
  2. C++ sınıfı oluşturulduğunda C# projesi (a sahip tek sınıftan yükseltilir Diğer C++ sınıflarının toplanması)
  3. C++ sınıfı döndürülür
  4. C# projesi verilerle çalışır

aşağıdaki sınıflar alışkanlık bellek sızıntılarını oluşturmak emin olmak istiyorum: https://github.com/cmusphinx/pocketsphinx-wp-demo/blob/master/PocketSphinxRntComp/SpeechRecognizer.h#L32

ben (hala) bellek boşaltma ile yeniyim ve bu serbest nasıl ve ne zaman bir ipucu bile yok. Kimse?

+0

Otomatiktir, yardım etmeye çalışmayın. –

cevap

1

Tüm ref sınıfları referans sayılır ve artık canlı referans olmadığında otomatik olarak serbest bırakılır. .NET bir çöp toplayıcısı kullandığından, bellek hemen boşaltılamayabilir.

Uygulamanızda veya kitaplığınızda döngüsel referanslar varsa, nesnelerin referans sayısı hiçbir zaman sıfırlanmaz ve bellek geri alınmaz (.NET, tüm nesneler yönetiliyorsa döngüsel başvurularla ilgilenebilir, ancak C++ sınıflarınız gibi yönetilen dünyanın dışından gelirler.

C++ kodunuzda dahili bellek sızıntıları olup olmadığı başka bir sorundur.

+0

@ peter-torr-msft Cevabınız için teşekkürler, kullanıyorum 'ref' sınıfları hakkında iyi bilgi. GC benim için yeni değil, ancak C++ 'da oluşturulan nesnelerle ilgili herhangi bir bilgi bulamadım. Yine teşekkürler! –

İlgili konular