Exception ^ e : C'est quoi ce "^" ?

Résolu
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 - 12 mai 2017 à 12:29
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 - 12 mai 2017 à 16:34
Bonjour,

J’analyse actuellement un code existant (en c++ MFC). Dans ce programme les exceptions sont déclarées comme ça :
try
{
	// ...
}
catch ( Exception ^ e )
{
	// ...
}
finally
{
	// ...
}

Or je ne comprend pas l’intérêt du "^" dans la déclaration de l'objet exception. Et personne en interne ne peut me l'expliquer (d'où ma question ici ^^). Si qq'un pouvait m'expliquer ce que viens faire cette "opérateur", bah je lui en serais reconnaissant.

Merci d'avance :)

5 réponses

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
12 mai 2017 à 12:37
Bonjour.

Le ^ à cet endroit, tout comme le "finally", ne sont pas une syntaxe valide en C++.
Ca ne ressemble pas à du C++, mais à du C++.Net managé. Il me semble que le ^, dans ce langage, est un pointeur qui se désalloue tout seul (il y a un garbage collector).
2
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
12 mai 2017 à 13:21
Bonjour

C'est ça.
0
Polack77 Messages postés 1098 Date d'inscription mercredi 22 mars 2006 Statut Membre Dernière intervention 22 octobre 2019 1
Modifié le 12 mai 2017 à 13:54
Merci de ta réponse :)

Ok, alors si je comprend bien ce projet n'est pas en C++ "pur"... :/ arf c'est pas vraiment ce qu'on m'avait "vendu".

Il me semblait bien aussi que le "finally" n'est pas standard en C++.

Par contre un truc me fait bizarre dans ce que tu dis (heee je tutoie toujours sur fofo, j'espère que ça ne te posera pas problème).
"Il me semble que le ^, dans ce langage, est un pointeur qui se désalloue tout seul". Sous entendu si la déclaration avait été "catch ( Exception& e )" ça n'aurait pas été le cas ?
Concernant le garbage colletor je vais tenter de comprendre ça et où le trouver.

Edit :
Après relecture du projet (enfin la config surtout) il semblerait que celui-ci soit en C++ CLI (ça me parle pas beaucoup mais vue que je trouve un peut de doc sur le sujet, je devrais réussir à comprendre)
Merci encore

Amicalement
Recherches sur Google = émission de CO²
Recherches sur Ecosia = Plantation d'arbres
Surfez écolo
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
12 mai 2017 à 16:11
Sous entendu si la déclaration avait été "catch ( Exception& e )" ça n'aurait pas été le cas ?


Vu que tu prends une référence, alors la vie de l'objet "e" n'est pas de ton ressort. La "vie" de l'objet "e" est dicté au niveau du "throw". Si on prend une référence sur une variable classique, alors la question ne se pose même pas, celle-ci se désallouera toute seule (avec ou sans garbage).
En "vrai" C++, c'est comme cela que l'on aurait procédé. Je ne pense pas que le ^ soit nécessaire ici (un & est sans doute plus adapté).


Concernant le garbage colletor je vais tenter de comprendre ça et où le trouver.


Tu ne le trouves pas, il est dans le langage. Tout comme il y a un garbage collector dans Java, C#, VB.Net, etc... Il y a un garbage dans C++.Net d'office.


Ok, alors si je comprend bien ce projet n'est pas en C++ "pur"... :/ arf c'est pas vraiment ce qu'on m'avait "vendu".


Si on a osé te vendre que c'était du C++, alors tu t'es fait "ultra" arnaquer ! Le C++.Net est bien plus proche du C# que du C++. Normalement c'est un peu un langage "glue", qu'on utilise pour faire tourner du C++ en .Net, mais je doute qu'on développe vraiment avec... Tout du moins, si j'avais le choix entre du C# et du C++.Net, je ne verrais pas du tout l'avantage du C++.Net face au C# !

@Whismeril: Tu connais sans doute bien mieux que moi l'environnement .Net, peux-tu confirmer que le C++.Net est un langage un peu particulier ? Personnellement, je n'y vois aucun intérêt autre que de porter des appli C++ en .Net !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19025 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 19 avril 2024 656
12 mai 2017 à 16:34
Alors C++ n'est pas pas mon fort, mais .Net oui.

CLI est une autre façon d'appeler .Net.
En fait on ne compile pas un projet .Net, l'exe est écrit dans un langage intermédiaire commun à tous les langages (C#, Vb.Net, C++.Net, J#), c'est le Langage Commun Intermédiaire.

Quand tu lances l'exe, la framework présente sur le pc interprète les instructions en CLI.

Il existe bien des projets C++.Net, la plupart du temps ça sert à faire un wrappeur d'une dll c++ win 32 vers c# ou autre langage .Net.

Le garbage collector est un outil qui libère la mémoire inutilisée un peu quand il veut. Les variables sont dites managées.
Il me semble que les types valeurs sont managées par défaut.
Pour les pointeurs tu peux choisir,
  • ^ : managé
  • & : pas managé


0
Rejoignez-nous