Poster une réponse à un sujet: les exceptions - quels sont les règles ?
Attention, ce sujet est un sujet ancien (6545 jours sans réponse)
Altar
Okey maintenant j'ai compris
rfr
Ben sans new, ton exception est déclarée sur la stack. Le compilateur s'occupe de la destruction de l'instance quand plus personne n'en a besoin.
Altar
C'est le throw va s'occuper de créer une instance de la classe ?
rfr
Bah, c'est une classe comme les autres ...
class Exception
{
private:
string & message;
Exception & baseException;
public:
Exception(string & message);
Exception(Exception & base, string & message);
virtual ~Exception();
};
class MyHornyException : public Exception
{
public:
MyHornyException(string & message);
MyHornyException(Exception & base, string & message);
virtual ~MyHornyException();
};
class Exception
{
private:
string & message;
Exception & baseException;
public:
Exception(string & message);
Exception(Exception & base, string & message);
virtual ~Exception();
};
class MyHornyException : public Exception
{
public:
MyHornyException(string & message);
MyHornyException(Exception & base, string & message);
virtual ~MyHornyException();
};
rfr
Heu d'accord mais ton MyHornyException, il sort d'où ?
Bah, c'est une classe comme les autres ...
Altar
Heu d'accord mais ton MyHornyException, il sort d'où ?
rfr
De mon expérience, les exceptions c'est le bien et le mal ... Trop de type d'exception tue l'exception
Bien sur, pour un programme donné, il faut toujours avoir une exception de base, les autres exceptions en derivent ce qui facilite les clauses try/catch.
Je soutiens que l'on peut très bien n'utiliser qu'une seule type d'exception. Par contre, ce qui me semble super utile c'est de pouvoir contenir une exception dans une autre, dans le cas ou l'exception en génère une nouvelle. On peut alors voir la stack des exceptions, ce qui facilite le debugging.
Autre chose, on peut aussi donner des codes aux erreurs qui est alors contenu dans l'exception. Ca permet par exemple de faciliter l'internationalisation et les messages par défaut.
Pour l'utilisation, ne jamais lancer une exception crée sur la heap (pas de new donc). En gros, on fait:
try {
throw MyHornyException("MODCOD501: You are so horny... (default message)");
} catch (MyHornyException & _ex) {
string code = _ex.getMessageCode();
}
My 2 cents ... mais c'est comme ça que je trouve les exceptions les plus facile à gérer sans surmultiplier le nombre de classe d'exception.
Bien sur, pour un programme donné, il faut toujours avoir une exception de base, les autres exceptions en derivent ce qui facilite les clauses try/catch.
Je soutiens que l'on peut très bien n'utiliser qu'une seule type d'exception. Par contre, ce qui me semble super utile c'est de pouvoir contenir une exception dans une autre, dans le cas ou l'exception en génère une nouvelle. On peut alors voir la stack des exceptions, ce qui facilite le debugging.
Autre chose, on peut aussi donner des codes aux erreurs qui est alors contenu dans l'exception. Ca permet par exemple de faciliter l'internationalisation et les messages par défaut.
Pour l'utilisation, ne jamais lancer une exception crée sur la heap (pas de new donc). En gros, on fait:
try {
throw MyHornyException("MODCOD501: You are so horny... (default message)");
} catch (MyHornyException & _ex) {
string code = _ex.getMessageCode();
}
My 2 cents ... mais c'est comme ça que je trouve les exceptions les plus facile à gérer sans surmultiplier le nombre de classe d'exception.
Altar
Alors pour ne pas trop faire n'importe comment, je me demandais s'il y avait une ligne de conduite à adopter quand on veut implémenter des exceptions correctement (ici en c++ mais ça doit être de même en java et tout langage OO) ?
Exemple une classe doit avoir sa classe d'exception et toutes les exceptions possibles pour cette classe doivent être contenue dans celle-ci ou plutôt faire un polymorphisme pour chacune des exceptions ? Je prends toutes les idées et la documentation que vous pourriez avoir Merci ^^
Exemple une classe doit avoir sa classe d'exception et toutes les exceptions possibles pour cette classe doivent être contenue dans celle-ci ou plutôt faire un polymorphisme pour chacune des exceptions ? Je prends toutes les idées et la documentation que vous pourriez avoir Merci ^^