0
我對C++有豐富的經驗,但我只是開始學習C++/CLI。 我注意到下面的模式有很多:在C++/CLI中使用數組時的常見模式
array<String^>^ x;
你們怎麼看待這個?我解釋這個的方式是, 這是一串字符串,我們希望它們全都在託管堆 上,這就是爲什麼我們使用String ^,但我們也希望該向量位於託管的 堆上,那就是爲什麼我們有
array<something>^.
對不起?
我對C++有豐富的經驗,但我只是開始學習C++/CLI。 我注意到下面的模式有很多:在C++/CLI中使用數組時的常見模式
array<String^>^ x;
你們怎麼看待這個?我解釋這個的方式是, 這是一串字符串,我們希望它們全都在託管堆 上,這就是爲什麼我們使用String ^,但我們也希望該向量位於託管的 堆上,那就是爲什麼我們有
array<something>^.
對不起?
C++ cli ref class
必須位於託管堆上。實際的非託管堆實例被阻止。
String
和array
都是ref class
類型,所以它們必須居住在託管堆上。
C++爲了提醒用戶這些是垃圾收集的指針類型,而不是文字或傳統的指針類型,要求您使用^
來結束類型。
雖然這是多餘的(的array<>
所有實例都array<>^
- 因此,在C#中不存在這樣的^
令牌),提醒這是一個管理型,而不是一個正常的類型可能有助於當你混合託管和非託管碼。
謝謝,我會在一分鐘內接受答案。 – user2381422
在C++/CLI中,您還可以在堆棧上創建一個託管對象!例如,在執行'Foo^foo = gcnew Foo()'時你可以直接寫'Foo foo',它會在堆棧上創建託管對象(ref class)!如果由類實現,它現在也會自動調用Dispose-Pattern! –
@jochenkalmbach我不知道:是指針自動消零還是什麼?你能否在一些解釋它的文檔中折騰我的鏈接? – Yakk