我刚刚遇到这个代码,一些谷歌搜索没有解释这个神秘的(对我来说)语法。
Hashtable^ tempHash = gcnew Hashtable(iterators_);
IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();
插入物的意思是什么? (gcnew
对我来说也是新手,我问过here。)
// 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^
。
这意味着这是对托管对象与常规C ++指针的引用。这些引用后面的对象由运行时管理,可以重新定位在内存中。它们也是自动垃圾收集的。
分配托管内存时,垃圾收集器可以移动该内存。 ^运算符是托管内存的指针,即使垃圾收集器移动它指向的对象,它也会继续指向正确的位置。
从MSDN,看起来像插入符号表示您正在获取正在创建的类型的句柄。
在C ++ / CLI中,它表示托管指针。您可以在此处阅读有关它(以及其他C ++ / CLI功能)的更多信息:
这意味着它是对托管对象的引用。