2010-10-05 5 views
2

Je mets à jour un vieux code C++ et je trouve que la plupart des classes sont définies comme:Quand utiliser __gc pour les classes et les structures?

public __gc class NameOfClass{ } 

J'ai trouvé un peu d'information sur gc here, mais il semble venir que avec des informations pour VS 2003. La documentation MSDN fournie avec ma copie de VS 2005 indique que __gc ne peut plus être utilisé.

Je suis un gars C# moi, donc je veux vous assurer que je ne fais pas une erreur lors de la mise à jour de ce code. La collecte des ordures est-elle automatique pour les classes C++ dans .NET 2.0 et supérieur? Ou le mot-clé __gc a-t-il été remplacé d'une manière ou d'une autre?

Répondre

3

Vous êtes à la recherche C++ avec extensions gérées qui était une brève et n'a pas tenter d'ajouter des fonctionnalités clr à cpp en utilisant une syntaxe assez inventive. Je crois qu'à partir de 2005 C++ cli a été entièrement supporté, ce qui est une implémentation complète du clr en C++. Jetez un oeil à this pour obtenir des conseils de migration de m.

+0

Merci pour l'aide. Le lien me donnait exactement ce dont j'avais besoin: "Dans la définition de langue d'origine, un type de classe de référence est précédé du mot-clé __gc Dans le langage révisé, le mot-clé __gc est remplacé par un des deux mots-clés espacés: refclass ou refstruct." – Slider345

1

Il a été remplacé (peut-être entièrement); Je crois que c'est encore supporté pour BC, mais il y avait un nouveau mécanisme introduit avec VS2005 qui rendait les types gérés plus explicites. Voir: http://msdn.microsoft.com/en-us/library/xey702bw%28v=VS.80%29.aspx

Pour référence, le gros problème avec l'ancienne syntaxe était qu'elle ajoutait une utilisation surchargée de la syntaxe C++ standard, qui dépendait des types sous-jacents, ce qui était horriblement confus dans le code. La nouvelle syntaxe est bien meilleure pour différencier les handles gérés des pointeurs non gérés.

Questions connexes