光用C#還不夠,很多時候,還是很需要C++於是回頭來看C++的資料,發現^居然沒看過。
比如,在這裡可以看到其用法:
http://msdn.microsoft.com/zh-cn/library/y52yxde8(VS.80).aspx
找到關於^的一點解釋如下:
託管擴充的一個最大的問題是對指標的使用。指標被用於各種各樣的任務,而其情況也是複雜多變的,因而非常難以理解。在某一特定的程式碼片段中要解讀自己在和哪一種指標打交道需要有一定程度的天賦。這種複雜性在下一個版本中會被去掉。在Visual C++ 2005中,指標還是原原本本的C++指標。它們指向穩定的對象,而您則可以用指標進行算術操作。指向對象的指標的生命週期必須由開發人員顯式管理。當使用指標時,運行庫不會負責對指標帶來的垃圾進行清理。
現在讓我們看一下Visual C++ 2005的設計人員是如何解決這一問題的。與Visual Studio .NET 2003和Visual Studio 2005中使用new運算子返回指標不同,gcnew運算子返回一個“控制代碼”這是一種新構造,在文法中用“^”符號來表示。該控制代碼引用託管堆中的整個對象。也就是說,它們不能用來指向類型的內部,而編譯器對它們的使用有許多限制,以此來強制執行這種行為,而這也可以協助開發人員正確並安全地使用控制代碼。控制代碼不允許進行指標算術運算,也不可以被強制轉換為空白指標或是任何整數類型。然而,星號和箭頭運算子仍被用來取消對它的引用。
這並不意味著您不能再獲得一個指向記憶體回收堆上的指標。與在C#中組合&運算子與固定的關鍵字相似,在Visual C++ 2005中,pin_ptr抽象類別型允許您檢索指向託管堆上對象的釘住指標。只要這個指標存在,託管堆中的對象就會被釘住,這可以防止記憶體回收行程在回收的過程中移動它。Visual C++ 2005還引入了跟蹤引用運算子,用百分比符號(%)來表示。當在C++中引入原生&引用運算子時,大多數開發人員都知道可以把它理解成一個指向對象的指標,在使用時是由編譯器來自動清除的。在大多數情況下,%對^而言就像&對*一樣。