
Jorge Lodos wrote:
Thank you for your comments. I agree with everything you said and try to avoid singletons in the first place. However, I have a practical problem that I have been able to "solve" only thru singletons. In a header only library that uses a class factory, the registration of objects with the factory is performed in a constructor of an object inside an anonymous namespace. Since the header may be #included more that once, I made those objects singletons to avoid multiple registration. The singleton::instance method may be called more that once without need, that's why I put "solve" in quotes. Since the object is inside an anonymous namespace, I can not use templates, which never get instantiated. If you or anyone else have a suggestion that allows for automatic registration without using singletons please share it :-)
Can you use something like the following: class auto_reg { static int count_; auto_reg() { if( ++count_ == 1 ) register(); } ~auto_reg() { if( --count_ == 0 ) unregister(); } }; int auto_reg::count_; To make it header-only use the template<class _ = void> trick.