在C ++ / CLI中,hat字符^有什么作用?

时间:2009-02-01 10:51:00

标签: visual-c++ c++-cli clr

我正在阅读Ivor Horton的Beginning Visual C ++ 2008,其许多CLR示例都有这个定义为main:

int main(array<System::String ^> ^args)

我逐页回到本书的开头,找到第一个这样的实例,并解释它的真正含义,但找不到。

显然它意味着与标准int main(int argc, char *argv[])相同,但我想知道实际使用^的时间和原因,以及它为什么存在(它是否做了指针{ {1}}和引用*无法代表)?

3 个答案:

答案 0 :(得分:40)

它是一个托管指针 - 而*标记指向非托管对象的指针,^指向垃圾收集对象(由框架处理)。有关在.NET中处理指针的方式的更多信息,请阅读this

答案 1 :(得分:19)

为了补充一点,在C ++ / CLI中,托管指针与普通指针分开处理,因此您甚至可以使用不同的关键字分配它们:

NativeObject* n = new NativeObject();
ManagedObject^ m = gcnew ManagedObject();

托管和原生对象是两个完全不同的东西,你不能混合它们(好吧,不容易)。

答案 2 :(得分:0)

请参阅此内容以获取完整的讨论:http://msdn.microsoft.com/de-de/library/yk97tc08.aspx

  

托管对象的句柄   堆指向“整个”对象,和   不是对象的成员。