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



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



Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();


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

650   7  

7 ответов:

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

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

// 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 дает a P*,%mngd доходность MO^.

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

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

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

http://msdn.microsoft.com/en-us/library/te3ecsc8 (VS. 80). aspx

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

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

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

Comments

    Ничего не найдено.