#include <iostream>
#include <mutex>
using namespace std;
template <class T>
class Singleton {
public:
static T *instance() {
if (object == NULL) {
mtx.lock();
if (object == NULL) object = new T;
mtx.unlock();
}
return object;
}
private:
Singleton() {} // be here? necessary?
static T *object;
static mutex mtx;
};
template <class T>
T* Singleton<T>::object = NULL;
template <class T>
mutex Singleton<T>::mtx;
class Foo {
};
int main() {
Foo *singletonFoo = Singleton<Foo>::instance();
return 0;
}