我刚刚遇到这个代码,一些谷歌搜索没有解释这个神秘的(对我来说)语法.
Hashtable^ tempHash = gcnew Hashtable(iterators_); IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();
插入物的意思是什么?(这gcnew
对我来说也是新的,我在这里问过这个问题.)
这是C++/CLI,插入符号是*(指针)的托管等效物,在C++/CLI术语中称为'句柄'到"引用类型"(因为您仍然可以使用非托管指针).
(感谢Aardvark指出了更好的术语.)
// 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++指针的引用.这些引用后面的对象由运行时管理,可以在内存中重新定位.它们也是自动垃圾收集的.
分配托管内存时,垃圾收集器可以移动该内存.^运算符是托管内存的指针,即使垃圾收集器移动它指向的对象,它也会继续指向正确的位置.