
Giovanni Piero Deretta wrote:
On Jan 15, 2008 12:21 PM, Anthony Williams <anthony_w.geo@yahoo.com> wrote:
John Torjo <john.groups <at> torjo.com> writes:
Today starts the formal Fast-Track review of the Boost.Utility/Singleton library. This is a very useful utility, so I'm expecting lots of reviews ;) * What is your evaluation of the potential usefulness of the library? I don't think this is at all useful. People should not be encouraged to use singletons, as there is already a tendency towards overuse. In most circumstances, singletons are a poor design choice, so there is little requirement for their use.
I consider singletons just another form of globals and thus bad style.
Let's see: "I consider if, else, for, do, while and the ternary operator just another form of goto and therefore bad style." ;-)
But sometimes they get handy, if you do not want to pass around a context to every function in a module. Anyways, I've regretted too every single singleton that I have used.
What about a form of thread local singleton which can be replaced with a scoped construct?
//global scope singleton<my_object> my_singleton;
void foo() { my_singleton.instance().use_singleton(); // the globaly scoped one or a local replacement. }
void bar() { scoped_replacer _ (my_singleton); // replace my_object of baz with a copy my_singleton.instance().perform_local_modification(); foo(); // at this point my_object of baz is reinstantiated }
void baz() { scoped_replacer _ (my_singleton, my_object()); // replace the initial my_object
// with a copy of the second parameter foo(); // at this point the original my_object is reinstantiated }
int main() { baz(); }
In practice it is a form of dynamic scoping, which might be more useful and flexible than a static singleton. You definitely want this dynamic scoped object to be per thread.
I haven't read Boost.Singleton documentation, maybe it already allows such a functionality.
I'm not sure I understand the purpose of the code provided, but it seems to be sufficiently trivial to implement the facility you describe on top of what's provided. Regards, Tobias