Я только что наткнулся на этот код, и несколько поисков в Google не дают объяснения этому таинственному (для меня) синтаксису.
Hashtable^ tempHash = gcnew Hashtable(iterators_);
IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();
Какого черта означает карета? (Это gcnew
также ново для меня, и я спросил об этом здесь .)
Ответы:
Это C ++ / CLI, и символ каретки является управляемым эквивалентом * (указателя), который в терминологии C ++ / CLI называется «дескриптором» «ссылочного типа» (поскольку у вас все еще могут быть неуправляемые указатели).
(Спасибо Aardvark за указание на лучшую терминологию.)
источник
В общем, punctuator
%
является^
как punctuator&
это*
. В C ++ унарный&
оператор в C ++ / CLI является унарным%
оператором.В то время как
&ptr
дает урожайностьP*
,%mngd
дает доходность приMO^
.источник
Это означает, что это ссылка на управляемый объект вместо обычного указателя C ++. Объекты, стоящие за такими ссылками, управляются средой выполнения и могут быть перемещены в память. Они также собираются автоматически.
источник
Когда вы распределяете управляемую память, эта память может перемещаться сборщиком мусора. Оператор ^ - это указатель на управляемую память, который продолжает указывать на правильное место, даже если сборщик мусора перемещает объект, на который он указывает.
источник
Похоже, что из MSDN каретка означает, что вы получаете указатель на создаваемый тип.
https://web.archive.org/web/20150117095313/http://msdn.microsoft.com/en-us/library/te3ecsc8%28VS.80%29.aspx
источник
В C ++ / CLI это означает управляемый указатель. Вы можете прочитать больше об этом (и других возможностях C ++ / CLI) здесь:
http://en.wikipedia.org/wiki/C%2B%2B/CLI
источник
Это означает, что это ссылка на управляемый объект.
источник