2011-03-27 2 views
0

Est-ce que quelqu'un a une copie du code source de la classe d'exception? Je voudrais étudier son implémentation. Merci

edit: Je cherche std :: exception
Je suis intéressé parce que je voudrais savoir comment le constructeur prend un char * et initialise est variable membre, et comment le constructeur de copie, opérateur d'affectation est fait dans cette classe.C++ code source de la classe d'exception

Répondre

1

Il n'y a pas de "classe d'exception" de base en C++: vous pouvez lancer à peu près n'importe quoi, même un int (throw 42; est tout à fait valide).

Si vous parlez de la classe std::exception, il y a très peu dedans: aucune de ses fonctions membres n'a besoin de faire quoi que ce soit (what() n'a qu'à retourner un pointeur vers une chaîne C). Seraient une mise en œuvre tout à fait correct:

struct exception { 
    exception() throw() { } 
    exception(const exception&) throw() { } 
    exception& operator=(const exception&) throw() { } 
    virtual ~exception() throw() { } 
    virtual const char* what() const throw() { return "o noez! an exception!"; } 
}; 

Les classes d'exception dans la bibliothèque standard qui vous permettent de spécifier votre propre chaîne (par exemple, std::runtime_error) utilisent std::string. Ils ne devraient pas avoir à faire de gestion manuelle de la mémoire car ils peuvent utiliser std::string. (Techniquement, une implémentation ne doit pas utiliser std::string en interne, mais elle doit en prendre une dans son constructeur.)