O que faz o acento circunflexo ( ‘^’) significa em C ++ / CLI?
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 .)
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 ??em> 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.
Em C ++ / CLI que significa um ponteiro gerenciado. Você pode ler mais sobre ele (e outros C ++ / CLI apresenta) aqui:
Isso significa que ele é uma referência a um objeto gerenciado.