Exception ^ e : C'est quoi ce "^" ? [Résolu]

Signaler
Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019
-
Messages postés
15933
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 mai 2021
-
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

Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
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).
Messages postés
15933
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 mai 2021
545
Bonjour

C'est ça.
Messages postés
1098
Date d'inscription
mercredi 22 mars 2006
Statut
Membre
Dernière intervention
22 octobre 2019

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
Messages postés
3839
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
15 avril 2021
121
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 !
Messages postés
15933
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
14 mai 2021
545
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é