我只是偶然发现了这段代码,一些谷歌搜索没有找到对这种神秘语法的解释(对我来说)。
Hashtable^ tempHash = gcnew Hashtable(iterators_);
IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();
这个插入符号到底是什么意思?(gcnew对我来说也是新的,我在这里问了一下。)
我只是偶然发现了这段代码,一些谷歌搜索没有找到对这种神秘语法的解释(对我来说)。
Hashtable^ tempHash = gcnew Hashtable(iterators_);
IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();
这个插入符号到底是什么意思?(gcnew对我来说也是新的,我在这里问了一下。)
当前回答
当分配托管内存时,垃圾收集器可以移动该内存。^操作符是托管内存的指针,即使垃圾回收器移动它所指向的对象,它也会继续指向正确的位置。
其他回答
这意味着这是对托管对象的引用,而不是普通的c++指针。这些引用背后的对象由运行时管理,并可以在内存中重新定位。它们也会自动进行垃圾回收。
这是c++ /CLI,插入符号是托管的*(指针),在c++ /CLI术语中被称为“引用类型”的“句柄”(因为你仍然可以有非托管指针)。
(感谢Aardvark指出了更好的术语。)
在c++ /CLI中,它表示托管指针。你可以在这里阅读更多关于它(以及其他c++ /CLI特性):
http://en.wikipedia.org/wiki/C%2B%2B/CLI
当分配托管内存时,垃圾收集器可以移动该内存。^操作符是托管内存的指针,即使垃圾回收器移动它所指向的对象,它也会继续指向正确的位置。
// 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^。