Что означает каретка ( ' ^ ' ) в C++/CLI?
Я только что наткнулся на этот код, и несколько поисков Google не дают никакого объяснения этого таинственного (для меня) синтаксиса.
Hashtable^ tempHash = gcnew Hashtable(iterators_);
IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();
Что, черт возьми, означает каре? (Тег gcnew также является новым для меня, и я спросил об этом здесь.)
7 ответов:
// 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дает aP*,%mngdдоходностьMO^.
Это означает, что это ссылка на управляемый объект по сравнению с обычным указателем C++. Объекты, стоящие за такими ссылками, управляются средой выполнения и могут быть перемещены в память. Они также автоматически собирают мусор.
когда вы выделили управляемую память, эта память может быть перемещена сборщиком мусора. Оператор ^ - это указатель на управляемую память, который продолжает указывать на правильно место, даже если сборщик мусора перемещает объект на который он указывает.
из MSDN похоже, что каретка означает, что вы получаете дескриптор создаваемого типа.
http://msdn.microsoft.com/en-us/library/te3ecsc8 (VS. 80). aspx
В C++ / CLI это означает управляемый указатель. Вы можете прочитать больше об этом (и других функциях C++/CLI) здесь:
Comments