// Copyright (c) 2010 Martin Knafve / hMailServer.com. // http://www.hmailserver.com #pragma once template class Singleton { public: virtual ~Singleton() { } static T * Instance() { if (instance_ == nullptr) { boost::lock_guard guard(create_instance_mutex_); instance_ = new T(); } return instance_; } private: static T * instance_; static boost::recursive_mutex create_instance_mutex_; }; template T *Singleton::instance_ = nullptr; template boost::recursive_mutex Singleton::create_instance_mutex_;