.net - ¿Qué es nuevo?
c++-cli (3)
Me encontré con este código y soy demasiado orgulloso para ir y 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 lo new
? (También estoy perplejo por el caret; pregunté por eso aquí ).
gcnew es para objetos de referencia .NET; los objetos creados con gcnew se recogen automáticamente como basura; es importante usar gcnew con tipos CLR
El símbolo ''^'' actúa de manera similar al ''*'' en C / C ++ cuando se declara 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 gestionado, ya que un objeto gestionado se puede comparar con ''nullptr'', como 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 utilizan 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 recuento automático de referencias no es gratuito en cuanto al rendimiento, así que úselo sabiamente.
gcnew
es un operador, al igual que el new
operador, excepto que no tiene que eliminar nada creado con él. Es elegida por correo electrónico. Utiliza gcnew para crear tipos administrados .Net y nuevo para crear tipos no administrados.