Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1332 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Question con sur une exception dans un constructeur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Question con sur une exception dans un constructeur

n°2027729
oliparcol
Murphy's Law Master
Posté le 07-10-2010 à 22:15:22  profilanswer
 

Bonjour,
 
Je début en C++ et j'aurais aimé savoir: si je lance une exception dans un constructeur. Je suis obligé d'utiliser un pointeur lorsque j'utilise un objet de cette classe ? Par exemple:
 

Code :
  1. Classe * pt_objet = NULL;
  2. try{
  3.      pt_objet = new Classe();
  4. }catch(const exception & ){
  5.      /* faire des trucs */
  6. }
  7. if(pt_objet)
  8.      /* faire d'autres trucs */


 
c'est bien impossible d'utiliser une référence vers un objet ou un objet comme variable ?
 
Merci d'avance,
oliparcol

mood
Publicité
Posté le 07-10-2010 à 22:15:22  profilanswer
 

n°2027756
Joel F
Real men use unique_ptr
Posté le 08-10-2010 à 08:13:37  profilanswer
 

http://www.gotw.ca/gotw/066.htm
 
Une exception ne devrait jamais sortir du constructeur mais etre traiter en son sein.

n°2027761
Un Program​meur
Posté le 08-10-2010 à 09:10:39  profilanswer
 

oliparcol a écrit :

Je début en C++ et j'aurais aimé savoir: si je lance une exception dans un constructeur. Je suis obligé d'utiliser un pointeur lorsque j'utilise un objet de cette classe?

Code :
  1. Classe * pt_objet = NULL;
  2. try{
  3.      pt_objet = new Classe();
  4. }catch(const exception & ){
  5.      /* faire des trucs */
  6. }
  7. if(pt_objet)
  8.      /* faire d'autres trucs */


 
c'est bien impossible d'utiliser une référence vers un objet ou un objet comme variable?


 
Aucun probleme avec

Code :
  1. try{
  2.     Classe object;
  3.     // faire des trucs
  4. } catch(const exception & ){
  5.     // faire des choses
  6. }


 
(Quant a la reference, je ne vois pas trop quel usage tu envisages)
 

Joel F a écrit :

http://www.gotw.ca/gotw/066.htm
Une exception ne devrait jamais sortir du constructeur mais etre traiter en son sein.


 
On ne va pas etre d'accord.  C'est le seul moyen d'eviter d'avoir un etat d'erreur pour l'objet si le constructeur peut echouer.  (Et je ne me souviens pas que ce soit la conclusion de ce GOTW, et en le survolant ca n'a pas l'air d'etre le cas).


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°2027911
Joel F
Real men use unique_ptr
Posté le 08-10-2010 à 19:18:57  profilanswer
 

pardon, on ne doit pas laisser leaker une exception provenant d'un truc interne, il faut l'intercepter et la traduire en exception du bon niveau.

n°2028028
oliparcol
Murphy's Law Master
Posté le 09-10-2010 à 19:41:14  profilanswer
 

Joel F a écrit :

pardon, on ne doit pas laisser leaker une exception provenant d'un truc interne, il faut l'intercepter et la traduire en exception du bon niveau.


 
C'est bizarre... ce n'est pas ce qui est marqué dans plusieurs sources sur le net... sinon on fait comment pour savoir que la construction d'un objet a échoué ? Il y a toujours l'astuce d'avoir un attribut du style "bool constructionEchouee" et de vérifier la valeur de l'attribut dès qu'on applique des méthodes à l'objet mais c'est quand même bien bien lourd...

n°2028029
oliparcol
Murphy's Law Master
Posté le 09-10-2010 à 19:51:22  profilanswer
 

Un Programmeur a écrit :


 
Aucun probleme avec

Code :
  1. try{
  2.     Classe object;
  3.     // faire des trucs
  4. } catch(const exception & ){
  5.     // faire des choses
  6. }


 


 
Le problème c'est que dans ce cas, l'existence de l'objet est limité au bloc try, donc on ne peut pas l'utiliser plus loins dans le programme.

n°2028033
Un Program​meur
Posté le 09-10-2010 à 20:07:16  profilanswer
 

D'accord.  Mais j'ai comme l'impression que ce n'est pas le cas le plus courant où tu peux avoir une exception dans un constructeur.  Quand j'ai le cas, je fait généralement du nettoyage avant de sortir de la fonction en condition d'erreur -- assez souvent les destructeur font tout seul le nettoyage d'ailleurs -- plutôt que de continuer avec simplement un pointeur nul.  J'imagine bien quelques cas où on peut vouloir le faire, mais ils sont plutôt... exceptionnels.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°2028046
oliparcol
Murphy's Law Master
Posté le 09-10-2010 à 22:43:10  profilanswer
 

oliparcol a écrit :


C'est bizarre... ce n'est pas ce qui est marqué dans plusieurs sources sur le net... sinon on fait comment pour savoir que la construction d'un objet a échoué ? Il y a toujours l'astuce d'avoir un attribut du style "bool constructionEchouee" et de vérifier la valeur de l'attribut dès qu'on applique des méthodes à l'objet mais c'est quand même bien bien lourd...


 
J'ai lu l'article et ce que j'en retire c'est la méthode  "bool constructionEchouee"  est pas bonne, qu'on peut lancer des exceptions dans les constructeurs mais il faut toujours traiter les exceptions au bons niveaux.

n°2028070
Joel F
Real men use unique_ptr
Posté le 10-10-2010 à 10:09:13  profilanswer
 

exactement


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Question con sur une exception dans un constructeur

 

Sujets relatifs
Question simple : destruction variable automatiquePourquoi ne peut-on pas hériter du constructeur d'une class mère ?
Jointure SQL petite questionQuestion existentielle : free()
question sur auto_ptrCréer une exception Soap
Struts : Exception creating bean of classQuestion de débutant en Ajax
question de design 
Plus de sujets relatifs à : Question con sur une exception dans un constructeur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR