插入符号('^')在C ++ / CLI中的含义是什么?

时间:2008-10-14 19:18:39

标签: .net c++-cli

我刚刚看到这段代码,并且一些谷歌搜索没有解释这种神秘的(对我来说)语法。

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

插入符什么意思? (gcnew对我来说也是新手,我问过here。)

9 个答案:

答案 0 :(得分:161)

这是C++/CLI,插入符号是*(指针)的托管等效物,在C ++ / CLI术语中称为'handle'为“引用类型”(因为您仍然可以不受管理)指针)。

(感谢Aardvark指出了更好的术语。)

答案 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中是一元%运算符。

虽然&ptrP*产生%mngdMO^收益,但

答案 2 :(得分:19)

这意味着这是对托管对象与常规C ++指针的引用。这些引用后面的对象由运行时管理,可以重新定位在内存中。它们也是自动垃圾收集的。

答案 3 :(得分:15)

分配托管内存时,垃圾收集器可以移动该内存。 ^运算符是托管内存的指针,即使垃圾收集器移动它指向的对象,它也会继续指向正确的位置。

答案 4 :(得分:4)

从MSDN开始,看起来插入符表示您正在获取正在创建的类型的句柄。

https://web.archive.org/web/20150117095313/http://msdn.microsoft.com/en-us/library/te3ecsc8%28VS.80%29.aspx

答案 5 :(得分:3)

在C ++ / CLI中,它表示托管指针。您可以在此处阅读有关它(以及其他C ++ / CLI功能)的更多信息:

http://en.wikipedia.org/wiki/C%2B%2B/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”引入的更多词)