Что означает каретка ('^) в С++/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
Когда вы назначили управляемую память, эту память можно перемещать сборщиком мусора. Оператор ^ является указателем на управляемую память, которая продолжает указывать на правильное место, даже если сборщик мусора перемещает объект, на который он указывает.
Ответ 5
Похоже, что из MSDN каретка означает, что вы получаете указатель на создаваемый тип.
https://web.archive.org/web/20150117095313/http://msdn.microsoft.com/en-us/library/te3ecsc8%28VS.80%29.aspx
Ответ 6
В С++/CLI это означает управляемый указатель. Вы можете узнать больше об этом (и других возможностях С++/CLI) здесь:
http://en.wikipedia.org/wiki/C%2B%2B/CLI
Ответ 7
Это означает, что это ссылка на управляемый объект.