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

Owe*_*wen 199 .net c++-cli

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

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();
Run Code Online (Sandbox Code Playgroud)

插入物的意思是什么?(这gcnew对我来说也是新的,我在这里问过这个问题.)

Rob*_*ker 167

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

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

  • @Owen,是的,它有管理的通讯员"%". (16认同)
  • (我猜"非托管引用")语法"&"是否仍然存在于C++/CLI中? (5认同)
  • % 是 C++/CLI 中 aa 引用的托管版本。 (5认同)

小智 73

// 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
Run Code Online (Sandbox Code Playgroud)

在一般情况下,加标点%^因为加标点&*.在C++中,一元运算&符在C++/CLI中是一元运算%符.

虽然&ptr收益率P*,%mngd收益率MO^.

  • 我宁愿说为什么不使用 ^mngd 而不是 * mngd .. 突然允许使用非托管指针符号 (*),而不是托管堆中声明的实际变量前面的托管指针 (^),这令人困惑。 (2认同)

Fra*_*nov 19

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


Joe*_*orn 16

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


Mar*_*ram 5

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

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


Jon*_*ury 5

从 MSDN,它看起来像插入符号意味着您正在获得正在创建的类型的句柄。

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

  • 修复了指向 archive.org 副本的链接。老实说,MSDN 链接非常脆弱,所有新的 MSDN 链接应该从一开始就通过 archive.org 运行。 (2认同)