45

我正在阅读 Ivor Horton 的《Beginning Visual C++ 2008》,它的许多 CLR 示例都对 main 有以下定义:

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

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

显然它的含义与 standard 相同int main(int argc, char *argv[]),但我想知道何时以及为什么^真正使用它,以及它为什么存在(它是否做了指针*和引用&无法表示的事情)?

4

3 回答 3

45

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

于 2009-02-01T10:56:29.397 回答
20

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

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

托管对象和本机对象是两个完全不同的东西,您不能混合使用它们(嗯,不容易)。

于 2009-02-01T11:26:06.467 回答
0

完整讨论请参见: http: //msdn.microsoft.com/de-de/library/yk97tc08.aspx

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

于 2009-02-01T10:56:07.480 回答