Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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)?

like image 604
Tuminoid Avatar asked Feb 01 '09 10:02

Tuminoid


2 Answers

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.

like image 200
Saulius Valatka Avatar answered Sep 22 '22 17:09

Saulius Valatka


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).

like image 41
Ray Hidayat Avatar answered Sep 22 '22 17:09

Ray Hidayat