Bonjour à tous,
Derrière ce titre un peu racoleur ce cache un problème assez amusant (ou pas, ça dépend du point de vue).
J'ai une classe qui ressemble à ça :
Code :
- class QtLogger : public Logger
- {
- public:
- static const QtLogger me;
- private:
- QtLogger();
- };
|
L'idée c'est d'avoir un logger spécifique à Qt qui va catcher les messages de Qt et les "logger" quelque part.
Voici l'implémentation (j'ai un peu simplifié) :
Code :
- void handler(QtMsgType type, const char* msg)
- {
- QtLogger::me.log(msg);
- }
- const QtLogger QtLogger::me;
- QtLogger::QtLogger() :
- Logger("Qt" )
- {
- qInstallMsgHandler(handler); // Fonction fournit par Qt permettant d'attraper ses messages via un handler.
- }
|
Or, le constructeur de QtLogger n'est jamais appelé ! À mon avis GCC doit shooter la variable me en se disant qu'elle n'est jamais utilisée. Si j'appelle artificiellement QtLogger::me.log(..) quelque part au hasard dans mon code alors le constructeur est appelé correctement.
Quelqu'un aurait une idée !? Est-ce une comportement normal ?