我刚刚看到这段代码,并且一些谷歌搜索没有解释这种神秘的(对我来说)语法。
Hashtable^ tempHash = gcnew Hashtable(iterators_);
IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();
插入符什么意思? (gcnew
对我来说也是新手,我问过here。)
答案 0 :(得分:161)
答案 1 :(得分:69)
// 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^
收益,但
答案 2 :(得分:19)
这意味着这是对托管对象与常规C ++指针的引用。这些引用后面的对象由运行时管理,可以重新定位在内存中。它们也是自动垃圾收集的。
答案 3 :(得分:15)
分配托管内存时,垃圾收集器可以移动该内存。 ^运算符是托管内存的指针,即使垃圾收集器移动它指向的对象,它也会继续指向正确的位置。
答案 4 :(得分:4)
从MSDN开始,看起来插入符表示您正在获取正在创建的类型的句柄。
答案 5 :(得分:3)
在C ++ / CLI中,它表示托管指针。您可以在此处阅读有关它(以及其他C ++ / CLI功能)的更多信息:
答案 6 :(得分:2)
这意味着它是对托管对象的引用。
答案 7 :(得分:0)
Microsoft系统算法架构师-T.T. Michael Berhane,04/22/2019
“在C ++ / CLI中,记号('^')是什么意思?”
坦率地说,插入符号只是开发人员学习术语的占位符。 “ ^”字符是术语“表示”或“符号”的科学表示法。它只是意味着“嘿,在我完全发展这个想法及其拓扑之前,我将把它留在这里。”这就是我的朋友。祝你好运。
答案 8 :(得分:0)
还值得考虑以下几句话,它们的答案略有不同:
“句柄声明符(^,发音为“hat”)修改了类型说明符,表示当系统确定该对象不再可访问时,应自动删除声明的对象。”
"因为原生C++指针(*)和引用(&)不是托管引用,垃圾收集器无法自动更新它们指向的地址。为了解决这个问题,使用句柄声明符指定垃圾收集器使用的变量知道并可以自动更新。”
(“本机”是 I.M.H.O. 比“句柄”更好的词,因为句柄可能是使用“Windows SDK”引入的更多词)