2011-02-15 29 views
10

gcroot ne anlama geliyor? Bunu okuduğum kodda buldum.C++/cli içinde gcroot

+1

1 google bağlantısı: http://msdn.microsoft.com/en-us/library/481fa11f(v=vs.80).aspx –

cevap

15

gcroot C++/cli sınıflarında yönetilen tiplerini tutan artmasına katkıda C++/cli şablon sınıfıdır. yönetilen nesne veya değer türü örneğine bir referans olarak

class Native { 
    public: 
    Native(Object ^obj) : 
     netstring(obj->ToString()) { // Initializing the gcroot<String ^> 
    } 
    ~Native() { 
    } 
    void Print() { 
     array<Char> ^chars = netstring->GetChars(); // Dereferencing the gcroot<String ^> 
     _wprintf("netstring is:"); 
     if (chars->Length > 0) { 
     pin_ptr<Char> charptr = &(chars[0]); 
     _wprintf("%s", (wchar_t const *)charptr); 
     } 
    } 
    private: 
    gcroot<String ^> netstring; 
}; 

gcroot eylemleri ve nesne veya değer türü örneği kopyalarken tüm çalışmaları yapıyor:

Örneğin aşağıdaki olabilir. Normalde GCHandle ve .NET çerçevesinin bazı C işlevleri ile çalışmanız gerekir. Bu hepsi gcroot içinde kapsüllenmiş.

9

.NET çöp toplayıcısını çalıştırdığında, okunabilirlik analizi yaparak hangi nesnelerin hala kullanılmakta olduğunu belirler. Nesneleri işaretçi ararken yalnızca yönetilen yığın analiz edilir, bu nedenle bir yerel nesneden yönetilen bir nesneye bir işaretçiniz varsa, çöp toplayıcısını bilmeniz gerekir, böylece erişilebilirlik analizine dahil edebilir ve böylece Hedef sıkıştırma sırasında hareket ederse işaretçiyi güncelleyin.

Rstevens'in dediği gibi, .NET GCHandle sınıfı bunu yapar ve C++/CLI, GCHandle için tip güvenliği ve kullanışlı sözdizimi ekleyen bir C++ yönlendirmeli sarıcıdır.

İlgili konular