2011-02-15 96 views
10

gcroot是什麼意思?我在我正在閱讀的代碼中找到它。gcroot in C++/cli

+1

1st google鏈接:http://msdn.microsoft.com/en-us/library/481fa11f(v=vs.80).aspx – 2011-02-15 15:05:17

回答

15

gcroot是一個C++/cli模板類,它簡化了C++/cli類中的託管類型。

例如,您可以有以下幾種:

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作爲對管理對象或值類型實例的引用和抄襲的對象或值類型實例時,做所有的工作。 通常你需要使用GCHandle和.NET框架的一些C函數。這全部封裝在gcroot中。

9

當.NET垃圾收集器運行時,它通過進行可達性分析來確定哪些對象仍在使用中。在查找指向對象的指針時,只分析託管堆,因此如果您有一個從本地對象指向託管對象的指針,則需要知道垃圾收集器,因此它可以將其包含在可達性分析中,因此它可以如果目標在壓縮過程中移動,則更新指針。根據rstevens的說法,.NET GCHandle類可以做到這一點,而C++/CLI是面向C++的GCHandle包裝器,它增加了類型安全性和方便的語法。