Re: A few questions about singletons...
On 24 sep, 23:03, "Somebody" <someb...@cox.net> wrote:
So, I've been programming for 16 yrs in C++ and it seems like all the OO
interviews these days think you need to know design patterns to be a good
(or even decent) programmer :p. What ya gonna do eh? :)...
Anyways, this is what I have for my singleton class.
Some classify singleton as an anti-pattern. It has been too much
confused with globals (IMO particularly in C++ because of the idiom
solving the initialisation order issue).
static CSingleton* m_pInst;
static CSingleton* GetInstance()
if (m_pInst == NULL)
m_pInst = new CSingleton;
CSingleton* CSingleton::m_pInst = NULL;
IIRC, you have implemented the Gamma singleton; it has a number of
pitfall you may search on internet.
Works fine... except...
1) what is the interview approved way to clean up the created object? Hav=
a static "clean up" method that the user is responsible for calling seems
completely retarded and anti-encapsulation. I've seen some solutions that
create a second CSingletonDestroyer class as static and pass in the point=
Then when the CSingletonDestroyer class is killed naturally, it kills the
You can use a Meyer singleton which solve the initialisation order
static CSingleton& GetInstance()
And the cleanup is made at termination. The cleanup of a singleton is
delicate because you don't known how is currently using it (it is even
worse when in a DLL); you should let the system decide when it is no
2) but the CSingletonDestroyer() class brings up thread safeness issues..=
if I wrap my GetInstance() in a critical section how does the critical
section get initialized and cleaned up? I guess I can use a mutex, which
will solve the init problem since that can be static init'ed, but wheres =
Singleton in multithreading environment is a delicate matter. There is
currently no standard way of doing it reliably (except in the next C++
You may search "C++ and the Perils of Double-Checked Locking" for a