2013-07-17 51 views
0

我對C++有豐富的經驗,但我只是開始學習C++/CLI。 我注意到下面的模式有很多:在C++/CLI中使用數組時的常見模式

array<String^>^ x; 

你們怎麼看待這個?我解釋這個的方式是, 這是一串字符串,我們希望它們全都在託管堆 上,這就是爲什麼我們使用String ^,但我們也希望該向量位於託管的 堆上,那就是爲什麼我們有

array<something>^. 

對不起?

回答

3

C++ cli ref class必須位於託管堆上。實際的非託管堆實例被阻止。

Stringarray都是ref class類型,所以它們必須居住在託管堆上。

C++爲了提醒用戶這些是垃圾收集的指針類型,而不是文字或傳統的指針類型,要求您使用^來結束類型。

雖然這是多餘的(的array<>所有實例都array<>^ - 因此,在C#中不存在這樣的^令牌),提醒這是一個管理型,而不是一個正常的類型可能有助於當你混合託管和非託管碼。

+0

謝謝,我會在一分鐘內接受答案。 – user2381422

+0

在C++/CLI中,您還可以在堆棧上創建一個託管對象!例如,在執行'Foo^foo = gcnew Foo()'時你可以直接寫'Foo foo',它會在堆棧上創建託管對象(ref class)!如果由類實現,它現在也會自動調用Dispose-Pattern! –

+0

@jochenkalmbach我不知道:是指針自動消零還是什麼?你能否在一些解釋它的文檔中折騰我的鏈接? – Yakk