About the subjectI hesitated for a while between using singletons objects or plain static ones.  After having read a lot of different opinions, I made mine: If you don't need to prevent multiple creation of an object, don't use a singleton.Therefore I used mostly static objects.ContextMy program is a complex scientific program. It must communicate with the outside world (using zmq), output some logs and time itself to be sure that everything is fine.What I didLoggerI dealt with the logs by creating/destroying the Logger object each time I need it. Static functions like Logger::log() << My Log;construct the object, and at destruction (end of calling function) the log is output. And this is fine!ZmqBecause it's needed everywhere in the code, the class implementing zmq cannot be owned by one object. I therefore access to a static object created above the main() function.TimersAgain my timers must be able to time over several functions and be printed all at once for easier diagnostics: same solution for me, a static TimerList object containing all timers used.The QuestionNow that you know as much as I do about my project: is it a bad design?What would you do instead? Singletons ? Something else?Here is my main.cppbool READONLY;// Must be started first to be deleted last.zmq::context_t context(1);zmq_ext::socket_t logSocket(context, ZMQ_PUB);namespace TimingModule{   TimerList tm;}//Must be static so that exit() do a proper deletion.static App app;namespace Messenger {    Messenger messenger(context);}int main(int argc, char *argv[]){   return app.run()}There is no exact answer because it's more set of advises and good practices: compiling the insightful comments would make a good answer. It helped a lot. Thanks!
Software design: too many static objects?
design;design patterns