What does the caret (‘^’) mean in C++/CLI?
// here normal pointer
P* ptr = new P; // usual pointer allocated on heap
P& nat = *ptr; // object on heap bind to native object
//.. here CLI managed
MO^ mngd = gcnew MO; // allocate on CLI heap
MO% rr = *mngd; // object on CLI heap reference to gc-lvalue
In general, the punctuator %
is to ^
as the punctuator &
is to *
. In C++ the unary &
operator is in C++/CLI the unary %
operator.
While &ptr
yields a P*
, %mngd
yields at MO^
.
This is C++/CLI and the caret is the managed equivalent of a * (pointer) which in C++/CLI terminology is called a 'handle' to a 'reference type' (since you can still have unmanaged pointers).
(Thanks to Aardvark for pointing out the better terminology.)