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

Polack77 1096 Messages postés mercredi 22 mars 2006Date d'inscription 13 décembre 2017 Dernière intervention - 12 mai 2017 à 12:29 - Dernière réponse : Whismeril 10542 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention
- 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 :)
Afficher la suite 

5 réponses

Répondre au sujet
cptpingu 3768 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 12 mai 2017 à 12:37
+2
Utile
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).
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cptpingu
Whismeril 10542 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 12 mai 2017 à 13:21
0
Utile
Bonjour

C'est ça.
Commenter la réponse de Whismeril
Polack77 1096 Messages postés mercredi 22 mars 2006Date d'inscription 13 décembre 2017 Dernière intervention - Modifié par Polack77 le 12/05/2017 à 13:54
0
Utile
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
Commenter la réponse de Polack77
cptpingu 3768 Messages postés dimanche 12 décembre 2004Date d'inscriptionModérateurStatut 13 décembre 2017 Dernière intervention - 12 mai 2017 à 16:11
0
Utile
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 !
Commenter la réponse de cptpingu
Whismeril 10542 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 14 décembre 2017 Dernière intervention - 12 mai 2017 à 16:34
0
Utile
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é


Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.