在C ++ / CLI中,插入符号('^')是什么意思?

我刚刚遇到这个代码,几个谷歌search没有解释这个神秘的(对我来说)语法。

Hashtable^ tempHash = gcnew Hashtable(iterators_); IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator(); 

脱字字是什么意思? ( gcnew对我来说也是新的,我在这里问了一下 。)

这是C ++ / CLI ,并且插入符号是在C ++ / CLI术语中被称为“引用types”的“句柄 ”(因为您仍然可以有非托pipe指针)的*(指针)的托pipe等价物。

(感谢土豚指出更好的术语。)

 // here normal pointer P* ptr = new P; // usual pointer allocated on heap P& nat = *ptr; // object on heap bind to native object //.. here CLI managed MO^ mngd = gcnew MO; // allocate on CLI heap MO% rr = *mngd; // object on CLI heap reference to gc-lvalue 

一般来说,标点符号%是作为标点符号的。 在C ++中,一元&运算符是在C ++ / CLI中的一元运算符。

&ptr产生P*%mngdMO^产出。

这意味着这是一个pipe理对象与常规C ++指针的引用。 这些引用后面的对象由运行时pipe理,可以重定位到内存中。 他们也自动垃圾收集。

当你分配托pipe内存时,内存可以被垃圾回收器移动。 ^运算符是托pipe内存的指针,即使垃圾收集器移动指向它的对象,它也会继续指向正确的位置。

这意味着它是对被pipe理对象的引用。

从MSDN,它看起来像插入意味着你正在获得正在创build的types的句柄。

http://msdn.microsoft.com/en-us/library/te3ecsc8(VS.80).aspx

在C ++ / CLI中,它意味着一个托pipe指针。 您可以在这里阅读更多关于它(和其他C ++ / CLIfunction):

http://en.wikipedia.org/wiki/C%2B%2B/CLI