Что означает каретка ('^) в С++/CLI?

Я просто натолкнулся на этот код, и несколько поисков Google не объясняют этот таинственный (мне) синтаксис.

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

Что, черт возьми, означает каретка? (gcnew также новичок для меня, и я спросил об этом здесь.)

Ответ 1

Это C++/CLI, а каретка является управляемым эквивалентом * (указателя), который в терминологии C++/CLI называется "дескриптором" "ссылочного типа" (поскольку у вас все еще могут быть неуправляемые указатели).

(Спасибо Aardvark за указание на лучшую терминологию.)

Ответ 2

// 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

В общем, пунктуатор % равен ^, поскольку пунктуатор & равен *. В С++ унарный оператор & находится в С++/CLI унарным оператором %.

Пока &ptr дает a P*, %mngd получается при MO^.

Ответ 3

Это означает, что это ссылка на управляемый объект по сравнению с обычным указателем на С++. Объекты, стоящие за такими ссылками, управляются средой выполнения и могут быть перемещены в память. Они также автоматически собираются с мусором.

Ответ 4

Когда вы назначили управляемую память, эту память можно перемещать сборщиком мусора. Оператор ^ является указателем на управляемую память, которая продолжает указывать на правильное место, даже если сборщик мусора перемещает объект, на который он указывает.

Ответ 6

В С++/CLI это означает управляемый указатель. Вы можете узнать больше об этом (и других возможностях С++/CLI) здесь:

http://en.wikipedia.org/wiki/C%2B%2B/CLI

Ответ 7

Это означает, что это ссылка на управляемый объект.