Pregunta

Me topé con este código y estoy muy orgulloso de ir a preguntarle al autor qué significa.

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

¿Qué es gcnew y qué tan importante es usar eso en lugar de simplemente nuevo ? (También estoy perplejo por el caret; pregunté por eso aquí .)

¿Fue útil?

Solución

gcnew es para objetos de referencia .NET; los objetos creados con gcnew se recolectan automáticamente; es importante usar gcnew con tipos CLR

Otros consejos

gcnew es un operador, al igual que el operador new , excepto que no tiene que eliminar nada creado con él. Se ha seleccionado g arbage c . Utiliza gcnew para crear tipos administrados .Net, y nuevo para crear tipos no administrados.

El cursor '^' actúa de manera similar al '*' en C / C ++ al declarar un 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;

Utilizo el término 'puntero' cuando describo el objeto administrado ya que un objeto administrado se puede comparar con 'nullptr' al igual que un puntero en C / C ++. Una referencia en C / C ++ no se puede comparar con 'nullptr' ya que es la dirección de un objeto existente.

Los objetos administrados usan el conteo automático de referencias, lo que significa que se destruyen automáticamente cuando tienen un recuento de referencia de cero, aunque si dos o más objetos inalcanzables se refieren entre sí, aún tendrá una pérdida de memoria. Tenga en cuenta que el conteo automático de referencias no es un rendimiento libre, así que úselo sabiamente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top