In C++/CLI, what does the hat character ^ do? [duplicate]
I was reading Ivor Horton's Beginning Visual C++ 2008 and many of its CLR examples have this definition for main:
int main(array<System::String ^> ^args)
I went back, page by page, to the beginning of the book to find the first such instance with an explanation what it really means, but couldn't find one.
Obviously it means the same as the standard int main(int argc, char *argv[])
, but I'd like to know when and why that ^
is really used, and why it even exists (does it do something that pointers *
and references &
cannot represent)?
It's a managed pointer - while * marks a pointer to an object that is unmanaged, ^ points to a garbage collected object (handled by the framework). Read this for more information about the way pointers are handled in .NET.
Just to add to that, in C++/CLI, managed pointers are handled separately from normal pointers, so you even allocate them with a different keyword:
NativeObject* n = new NativeObject();
ManagedObject^ m = gcnew ManagedObject();
Managed and Native objects are two completely different things and you can't mix them (well, not easily).