Automated Traders Desk Interview Question
Software Engineer / Developerstemplate <typename T>
class Singleton
{
public:
T* Instance()
{
if(!instance)
{
Lock mutex; // RAII object which aquires mutex lock
if(!instance) // Double check
{
instance = new T;
}
}
return instance;
}
private:
Singleton(){}
~Singleton(){}
static T *instance;
};
In .cpp
static Singleton<T>::instance = 0
exception safe and thread-safe
- ac November 14, 2009template <typename T>
class Singleton
{
public:
T* Instance()
{
if(!instance)
{
Lock lock(m_dataMutex); // RAII object which aquires mutex lock
if(!instance) // Double check
{
try
{
instance = new T;
}
catch(...)
{
cout<<"Exception encountered in Singleton::MyInstance"<<endl;
}
}
}
return instance;
}
private:
Singleton(){}
Singleton(const Singleton&){}
Singleton& operator=(const Singleton&){}
~Singleton(){}
static T *instance;
static Mutex m_dataMutex;
};