我正在阅读Ivor Horton的Beginning Visual C ++ 2008,其许多CLR示例都有这个定义为main:
int main(array<System::String ^> ^args)
我逐页回到本书的开头,找到第一个这样的实例,并解释它的真正含义,但找不到。
显然它意味着与标准int main(int argc, char *argv[])
相同,但我想知道实际使用^
的时间和原因,以及它为什么存在(它是否做了指针{ {1}}和引用*
无法代表)?
答案 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:
托管对象的句柄 堆指向“整个”对象,和 不是对象的成员。