D'une manière standard en C++ pour définir une classe d'exception et de lancer des exceptions

Je veux construire une classe de fonctions qui peuvent lever des exceptions que j'ai envie de l'attraper quand je l'utilise.
J'hérite de my_exception standard de la classe exception.
- Je mettre en œuvre la ce() la fonction de sorte qu'elle retourne une chaîne de caractères qui est stocké dans une chaîne privée variable

Je pense qu'il serait préférable de définir l'exception, comme une classe imbriquée, la façon dont c'est fait dans la bibliothèque iostream avec ios_base::l'échec.

Ce que je suis moins sûr, est de savoir où et comment je dois définir l'objet de la my_excpetion. Je souhaite que je pourrais voir l'intérieur du code de la iostream fonctions et de voir comment ils ont fait.
J'ai pensé à plusieurs options:

  1. Pour chaque motif d'exception, je peux définir une instance statique de my_exception, avec un constructeur qui reçoit une chaîne de caractères et l'enregistrer sur ma chaîne privée pointeur.
  2. Pour chaque motif d'exception, je peux définir une autre classe qui hérite de my_exception et de mettre en œuvre ce qui, comme une fonction qui renvoie une chaîne constante (la raison).
    Je peux tenir une instance de chacun des exceptions dans des sous-classes, ou de jeter le type.
    BTW, quand nous avons l'habitude de jeter type et pas l'instance?
  3. Je suppose que c'est faux: chaque fois que je veux lancer une exception, pour créer une nouvelle my_exception avec un constructeur qui reçoit une chaîne de caractères. Ceci est fait en Java, mais ce que je comprends, il va être problématique en C++ parce que l'exception doit être supprimé quelque part. Droit?

Je pense que le 1er est celui de droite, est-il?
Il n'y a plus des options standard?

Merci beaucoup!

bonne question, mais très subjective.

OriginalL'auteur ip84 | 2011-05-28