Domanda

Mi sono imbattuto in questo codice e sono troppo orgoglioso di andare a chiedere all'autore cosa significa.

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

Che cos'è gcnew e quanto è importante utilizzarlo anziché semplicemente nuovo ? (Sono anche sconcertato dal cursore; ho chiesto di qui ).

È stato utile?

Soluzione

gcnew è per oggetti di riferimento .NET; gli oggetti creati con gcnew vengono automaticamente raccolti nell'immondizia; è importante usare gcnew con i tipi CLR

Altri suggerimenti

gcnew è un operatore, proprio come l'operatore new , tranne per il fatto che non è necessario eliminare nulla creato con esso. È g arbage c raccolto. Si utilizza gcnew per la creazione di tipi gestiti .Net e new per la creazione di tipi non gestiti.

Il cursore '^' agisce in modo simile al '*' in C / C ++ quando dichiara 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;

Uso il termine "puntatore" quando descrivo l'oggetto gestito come un oggetto gestito può essere paragonato a "nullptr" proprio come un puntatore in C / C ++. Un riferimento in C / C ++ non può essere paragonato a "nullptr" poiché è l'indirizzo di un oggetto esistente.

Gli oggetti gestiti usano il conteggio dei riferimenti automatici, il che significa che vengono distrutti automaticamente quando hanno un conteggio di riferimento pari a zero anche se se due o più oggetti non raggiungibili si riferiscono a vicenda, si avrà comunque una perdita di memoria. Tieni presente che il conteggio automatico dei riferimenti non è una prestazione gratuita, quindi usalo con saggezza.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top