Что означает каретка (‘^’) в C ++ / CLI? - PullRequest
186 голосов
/ 14 октября 2008

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

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

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

Ответы [ 8 ]

161 голосов
/ 14 октября 2008

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

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

69 голосов
/ 17 января 2013
// 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

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

В то время как &ptr дает P*, %mngd дает MO^.

19 голосов
/ 14 октября 2008

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

15 голосов
/ 14 октября 2008

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

4 голосов
/ 14 октября 2008

Похоже, что из MSDN каретка означает, что вы получаете дескриптор создаваемого типа.

https://web.archive.org/web/20150117095313/http://msdn.microsoft.com/en-us/library/te3ecsc8%28VS.80%29.aspx

3 голосов
/ 14 октября 2008

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

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

2 голосов
/ 14 октября 2008

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

0 голосов
/ 23 апреля 2019

Microsoft Systems Algorithm Architect - Т. Т. Майкл Берхейн, 04/22/2019

«Что означает каретка (‘ ^ ’) в C ++ / CLI?»

Откровенно говоря, слово «карета» - это просто место, где разработчики могут изучать терминологию. Символ «^» является научным обозначением термина «Обозначение» или «Обозначение». Это просто означает «Эй, я собираюсь оставить это здесь, пока я полностью не разработаю эту идею и ее топологию». Это все, мой друг. Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...