在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*
, %mngd
以MO^
产出。
这意味着这是一个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):