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

问题描述 投票:185回答:8

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

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

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

.net c++-cli
8个回答
161
投票

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

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


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^


19
投票

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


16
投票

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


4
投票

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

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


3
投票

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

http://en.wikipedia.org/wiki/C%2B%2B/CLI


2
投票

这意味着它是对托管对象的引用。

© www.soinside.com 2019 - 2024. All rights reserved.