Qu'est-ce que gcnew?

je suis tombé sur ce code et suis trop fier d'aller demander à l'auteur ce qu'il signifie.

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

Qu'est-ce que gcnew et à quel point est-il important de l'utiliser au lieu de simplement new ? (Je suis également étonné par le caret; j'ai demandé à propos de ce ici .)

44
demandé sur Community 2008-10-14 23:17:38

3 réponses

gcnew .NETTE de référence des objets; les objets créés avec gcnew sont automatiquement récupérées; il est important d'utiliser gcnew avec les types CLR

60
répondu Steven A. Lowe 2008-10-14 19:26:28

gcnew est un opérateur, tout comme l'opérateur new , sauf que vous n'avez pas à supprimer quoi que ce soit créé avec lui. C'est g arbage c ollected. Vous utilisez gcnew pour créer des types gérés par .Net, et new pour créer des types non gérés.

35
répondu Joel Coehoorn 2016-10-07 07:21:23

Le signe '^' actes simarly à l' '*' en C/C++ lors de la déclaration d'un type;

// 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;

j'utilise le terme "pointeur" pour décrire l'objet géré comme un objet géré peut être comparé à "nullptr" comme un pointeur en C/C++. Une référence en C/C++ ne peut pas être comparé à "nullptr", comme c'est l'adresse d'un objet existant.

les objets gérés utilisent un comptage de référence automatique, ce qui signifie qu'ils sont détruits automatiquement lorsqu'ils avoir un compte de référence de zéro bien que si deux ou plusieurs objets inaccessibles se réfèrent l'un à l'autre, vous aurez toujours une fuite de mémoire. Soyez averti que le comptage de référence automatique n'est pas gratuit en termes de performances donc utilisez-le à bon escient.

1
répondu user2796283 2016-04-26 11:04:18