Si tu tiens à lever une exception dans le constructeur, j'aurais plutôt utilisé un singleton et la fonction de création (avec paramètres) du singleton ressemblerait à :
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 Log * Log::s_log = 0; /*static*/ Log & Log::create_instance(params const & p) { try { s_log = new Log(p); return *s_log; } catch (std::exception & e) { Signaler l'erreur à qui pourrait s'en occuper ... Mais qui ? } s_log = new Log(); // le ctr par défaut étant no-throw // et si il y a un echec sur le new, on est bien embétés de toutes façons return *s_log; } /*static*/ Log & Log::instance() { assert(s_log); return *s_log; }
Partager