Pergunta

Eu deparei com este código e algumas pesquisas do Google aparecer nenhuma explicação desta sintaxe misteriosa (para mim).

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

O que o Parreira é que o acento circunflexo significa? (O gcnew também é novo para mim, e eu perguntei sobre isso aqui .)

Foi útil?

Solução

Esta é C ++ / CLI eo acento circunflexo é o conseguiu equivalente de um * (ponteiro) que em C terminologia ++ / CLI é chamado um 'pega' a um 'tipo de referência' (desde que você ainda pode ter ponteiros não gerenciados).

(graças a Aardvark para apontar a melhor terminologia.)

Outras dicas

// 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 &ptr produz um P*, os rendimentos %mngd em MO^.

Isso significa que esta é uma referência a um objeto gerenciado vs. um ponteiro regular de C ++. Objetos por trás de tais referências são geridos pelo tempo de execução e podem ser realocados na memória. Eles também são automaticamente coleta de lixo.

Quando você alocados conseguiu memória, essa memória pode ser movida pelo coletor de lixo. O operador ^ é um ponteiro para a memória gerida, que continua a apontar para o correta lugar, mesmo se o coletor de lixo move o objeto ele aponta.

De MSDN, parece que os meios de cursor que você está recebendo um identificador para o tipo que está sendo criado.

https://web.archive.org/web/20150117095313/http://msdn.microsoft.com/en-us/library/te3ecsc8%28VS.80%29.aspx

Em C ++ / CLI que significa um ponteiro gerenciado. Você pode ler mais sobre ele (e outros C ++ / CLI apresenta) aqui:

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

Isso significa que ele é uma referência a um objeto gerenciado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top