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:
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; } |