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? ( gcnew
Isso também é novo para mim, e eu perguntei sobre isso aqui .)
Respostas:
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.)
fonte
Em geral, o pontuador
%
é^
como o pontuador&
é*
. Em C ++, o&
operador unário está em C ++ / CLI, o%
operador unário .Enquanto
&ptr
produz aP*
,%mngd
produz emMO^
.fonte
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.
fonte
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.
fonte
No MSDN, parece que o sinal de intercalação significa que você está identificando o tipo que está sendo criado.
https://web.archive.org/web/20150117095313/http://msdn.microsoft.com/en-us/library/te3ecsc8%28VS.80%29.aspx
fonte
Em C ++ / CLI, significa um ponteiro gerenciado. Você pode ler mais sobre isso (e outros recursos C ++ / CLI) aqui:
http://en.wikipedia.org/wiki/C%2B%2B/CLI
fonte
Isso significa que é uma referência a um objeto gerenciado.
fonte