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

Tum*_*oid 40 clr c++-cli visual-c++

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

int main(array<System::String ^> ^args)
Run Code Online (Sandbox Code Playgroud)

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

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

Sau*_*tka 42

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


Ray*_*yat 20

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

NativeObject* n = new NativeObject();
ManagedObject^ m = gcnew ManagedObject();
Run Code Online (Sandbox Code Playgroud)

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