Question

Je suis tombé sur ce code et je suis trop fier pour demander à l'auteur ce que cela signifie.

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

Qu'est-ce que gcnew et quelle est l'importance de l'utiliser au lieu de simplement nouveau ? (Je suis aussi déconcerté par le curseur; j'ai posé des questions à ce sujet sur par ici .

Était-ce utile?

La solution

gcnew est destiné aux objets de référence .NET. Les objets créés avec gcnew sont automatiquement récupérés. il est important d'utiliser gcnew avec les types CLR

Autres conseils

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

Le curseur '^' agit de la même manière que le '*' 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é car un objet géré peut être comparé à "nullptr", exactement comme un pointeur en C / C ++. Une référence en C / C ++ ne peut pas être comparée à 'nullptr' car il s'agit de l'adresse d'un objet existant.

Les objets gérés utilisent le comptage de références automatique, ce qui signifie qu'ils sont détruits automatiquement lorsqu'ils ont un comptage de références égal à zéro. Toutefois, si deux objets inaccessibles ou plus se réfèrent, vous aurez toujours une fuite de mémoire. Sachez que le comptage automatique des références n’est pas gratuit en termes de performances. Utilisez-le donc judicieusement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top