O que significa o sinal de intercalação ('^') em C ++ / CLI?


212

Acabei de encontrar esse código e algumas pesquisas no Google não explicam essa misteriosa sintaxe (para mim).

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

O que diabos significa o sinal de intercalação? ( gcnewIsso também é novo para mim, e eu perguntei sobre isso aqui .)


6
A propósito, é pronunciado "chapéu" .
kmote

Respostas:


176

Isso é C ++ / CLI e o cursor é o equivalente gerenciado de um * (ponteiro) que na terminologia C ++ / CLI é chamado de 'identificador' para um 'tipo de referência' (já que você ainda pode ter ponteiros não gerenciados).

(Obrigado a Aardvark por apontar a melhor terminologia.)


5
A sintaxe (suponho "referência não gerenciada") "&" ainda existe no C ++ / CLI?
Owen

C ++ / CLI é uma extensão do C ++ normal, então sim - é apenas para referências não gerenciados embora
1800 INFORMATION

77
// 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

Em geral, o pontuador %é ^como o pontuador &é *. Em C ++, o &operador unário está em C ++ / CLI, o %operador unário .

Enquanto &ptrproduz a P*, %mngdproduz em MO^.


1
Eu preferiria dizer por que não ^ mngd em vez de * mngd .. De repente, é confuso usar o símbolo de ponteiro não gerenciado (*), não o ponteiro gerenciado (^) na frente da variável realmente declarada no heap gerenciado.
swcraft

20

Isso significa que essa é uma referência a um objeto gerenciado versus um ponteiro C ++ comum. Os objetos por trás dessas referências são gerenciados pelo tempo de execução e podem ser realocados na memória. Eles também são coletados automaticamente.


17

Quando você aloca memória gerenciada, essa memória pode ser movida pelo coletor de lixo. O operador ^ é um ponteiro para a memória gerenciada, que continua apontando para o local correto, mesmo que o coletor de lixo mova o objeto para o qual aponta.




Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.