IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Exception dans le constructeur


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut Exception dans le constructeur
    Bonjour,

    j'ai beaucoup de mal à comprendre l'interet de lever une exception dans un constructeur comme c'est expliqué dans la faq.
    En effet, le fait de lever une exception va terminer le programme, non ?
    Par exemple, supposons un un truc du style dans un constructeur où on désire ouvrir un fichier pour lire son contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	try
    	{
    		if(fopen("un fichier qui n'existe pas", "rb")
    			throw std::string( "fichier inexistant" );
    	}
    	catch ( const std::string & Msg )
    	{
    		std::cerr << Msg;
    		throw;
    	}
    Bon si je mets pas le throw dans le catch, je ne termine pas mon programme certes, mais qu'est ce que je fais de mon objet ?

    Et les exceptions dans un process 7/7 24/24 ? On ne va quand même pas l'arreter ? A mon avis (tant que je comprends pas plus ce mécanisme) il vaut mieux "tester avec des if" pour ne pas risquer l'interruption du prog, non ?

    Merci de m'éclairer la-dessus.

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Si tu entoure ton constructeur de try...catch
    Le programme ne s'arrêtera pas
    Et tu pourra même réaliser des actions pour traiter les erreurs.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    merci pour ta réponse.
    Mais alors ça revient au même que de tester si le constructeur a marché non ?
    Voir mon récent post : http://www.developpez.net/forums/sho....php?t=339081&
    où Laurent Gomilia m'a suggéré de redéfinir les opérateur ! et de conversion vers bool.

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Oui ça revient a peut près à la même chose...

    Edit : en me relisant, je ne sais pas si je me suis bien fait comprendre quand j'ai dit que le programme ne s'arrêterai pas, je parlais du programme global, dans ton constructeur tout le code qui se trouvera après le throw sera zappé.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 577
    Par défaut
    Citation Envoyé par mad-math
    Edit : en me relisant, je ne sais pas si je me suis bien fait comprendre quand j'ai dit que le programme ne s'arrêterai pas, je parlais du programme global, dans ton constructeur tout le code qui se trouvera après le throw sera zappé.
    Oui oui j'avais bien compris

  6. #6
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    En effet, le fait de lever une exception va terminer le programme, non ?
    T'as pas trop du comprendre le chapitre sur les exceptions de ton livre toi...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/05/2008, 20h08
  2. Exceptions dans le constructeur
    Par disturbedID dans le forum C++
    Réponses: 20
    Dernier message: 14/02/2008, 13h42
  3. Réponses: 18
    Dernier message: 28/02/2007, 10h23
  4. exception dans un constructeur
    Par xxiemeciel dans le forum C++
    Réponses: 25
    Dernier message: 23/11/2005, 18h14
  5. Capture d'exception dans un constructeur
    Par declencher dans le forum Composants VCL
    Réponses: 8
    Dernier message: 03/02/2004, 12h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo