Pergunta

Eu tropecei nesse código e estou orgulhoso demais para perguntar ao autor o que isso significa.

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

O que é gcnew e quão importante é usar isso em vez de simplesmente new? (Também estou perplexo com o cuidador; perguntei sobre isso por aqui.)

Foi útil?

Solução

GCNew é para objetos de referência .NET; Os objetos criados com o GCNew são automaticamente coletados de lixo; É importante usar o GCNew com os tipos de CLR

Outras dicas

gcnew é um operador, assim como o new Operador, exceto que você não precisa excluir nada criado com ele. Isso é garball cOLLECTED. Você usa o GCNew para criar tipos gerenciados .NET e novo para criar tipos não gerenciados.

O cuidador '^' age similarmente para o '*' em c/c ++ ao declarar um tipo;

// pointer to new std::string object -> memory is not garbage-collected
std::string* strPtr = new std::string;

// pointer to System::String object -> memory is garbage-collected
System::String^ manStr = gcnew System::String;

Eu uso o termo 'ponteiro' ao descrever o objeto gerenciado como um objeto gerenciado pode ser comparado a 'nullptr', assim como um ponteiro em C/C ++. Uma referência em C/C ++ não pode ser comparada a 'Nullptr', pois é o endereço de um objeto existente.

Os objetos gerenciados usam a contagem de referência automática, o que significa que são destruídos automaticamente quando têm uma contagem de referência de zero, embora se dois ou mais objetos inacessíveis se referirem um ao outro, você ainda terá um vazamento de memória. Esteja avisado de que a contagem automática de referência não é de desempenho gratuito, portanto, use -a com sabedoria.

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