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 :

[Exceptions] propagation


Sujet :

C++

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Par défaut [Exceptions] propagation
    Bonjour,

    Comme le titre l'indique j'aimerai faire de la propagation du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    try
    {
     // traitement 
    }
    catch(const std::Exception& e)
    {
     // traitement d'erreur local
     throw e;
    }
    rien de bien méchant.

    Par contre je me pose la question dans le cas où il y a plusieurs catch dont un qui hérite de l'autre ou qui pourrait catcher l'autre je m'explique

    Prenons le cas où Exception_A hérite de Exception.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    try
    {
     // traitement normal
    }
    catch(const Exception_A& e)
    {
     // traitement d'erreur local
     throw e;
    } 
    catch(const std::Exception& e)
    {
     // traitement d'erreur local
     throw e;
    } 
    catch(...)
    {
     // traitement d'erreur local
     throw std::Exception("erreur inconnue");
    }
    Alors voilà si mon traitement normal envoie un exception de type Exception_A donc je la re-"throw".... mais sera-t-elle "catchée" par le bloc juste en dessous.... et je me pose la même question pour le dernier catch bien sur.

    En gros si je fais un simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    try
    {
     // traitement normal
    }
    catch(const std::Exception& e)
    {
     // traitement d'erreur local
     throw e;
    } 
    catch(...)
    {
     // traitement d'erreur local
     throw std::Exception("erreur inconnue");
    }
    et que je "catche" une "std::Exception" et que je la re-"throw" sera-t-elle "catché" juste en dessous.

    Merci d'avance.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 73
    Par défaut
    Elle ne sera pas "catchée" par les catchs en dessous car les catch ne "chope" que ce qu'il y a dans le try. Ca remontera d'un étage. Mais pourquoi faire catch et throw directement? Autant laisser l'exceptions remontées toute seule directement.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Par défaut
    Merci.

    Autant laisser l'exceptions remontées toute seule directement.
    non car c'est pour effectuer un traitement localement (comme le dit le commentaire) et rebalancer l'exception pour faire de la propagation d'exception car les méthodes appellantes ont besoin de savoir quel type d'exception a été lancée.

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Juste une précision : pour rebalancer une exception, "throw" suffit. Ca pourra être utile notamment dans le catch(...), où tu n'as pas de variable correspondant à l'exception.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 151
    Par défaut
    oki merci pour cette précision, je vais modifier ça alors

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

Discussions similaires

  1. Exceptions -propagation et traitement.
    Par kamimar dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 13/06/2008, 18h20
  2. [NullReferenceException] propager l'exception ?
    Par Ticoche dans le forum Windows Forms
    Réponses: 8
    Dernier message: 02/01/2008, 16h07
  3. Propager une exception
    Par ploxien dans le forum Langage
    Réponses: 3
    Dernier message: 10/10/2007, 15h55
  4. [Exception] Propagation des exceptions
    Par Rayek dans le forum Langage
    Réponses: 5
    Dernier message: 03/08/2007, 16h59
  5. [C# 1.1] Comment propager l'exception ?
    Par Monstros Velu dans le forum C#
    Réponses: 3
    Dernier message: 17/06/2006, 13h32

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