$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Peter Dimov (pdimov_at_[hidden])
Date: 2005-02-14 14:38:19
Jorge Lodos wrote:
>
>> as a "singleton" to solve the initialization order problem (the only
>> legitimate use of the "singleton pattern", in my opinion).
>>
>
> Could you please elaborate? Why do you consider this is the only
> legitimate use for this pattern? Thanks in advance.
A singleton is simply a glorified wrapper over several global variables and
functions. There is little difference between
Singleton::instance().f();
and
Singleton::f();
where the second Singleton is a namespace. The global variables don't become
any less "evil" when they are made members of a singleton class.
When a class represents an out-of-program entity that, by its nature, has a
single instance, this class can be flattened into functions.
This isn't black and white, of course; today's code may treat the video card
as a singleton, but tomorrow's computers may add multiple video card
support. In this case I still prefer something along the lines of
VideoCard & get_video_card( int id ); // noncopyable
or maybe even
video_card_ref get_video_card( int id ); // reference copy semantics
instead of the "multisingleton" way of
VideoCard::instance( id ).
But "true" singletons are either crippled ordinary classes or collections of
global functions (under the assumption that there are no initialization
order issues, of course).