X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Utils%2Fsingleton.hh;h=b7b2814ac8fd485149bf3371928532caa4f34d12;hb=3863d46dd898b7bc35ea8c6ccd8563b18762a6b6;hp=e4bdbb621935c3008c0f22f93378301515c16ff9;hpb=f73fa16ed5abdce272ac77f8b8b9ef2b9922c266;p=senf.git diff --git a/Utils/singleton.hh b/Utils/singleton.hh index e4bdbb6..b7b2814 100644 --- a/Utils/singleton.hh +++ b/Utils/singleton.hh @@ -1,8 +1,8 @@ // $Id$ // -// Copyright (C) 2007 -// Fraunhofer Institute for Open Communication Systems (FOKUS) -// Competence Center NETwork research (NET), St. Augustin, GERMANY +// Copyright (C) 2007 +// Fraunhofer Institute for Open Communication Systems (FOKUS) +// Competence Center NETwork research (NET), St. Augustin, GERMANY // Stefan Bund // // This program is free software; you can redistribute it and/or modify @@ -23,8 +23,8 @@ /** \file \brief singleton public header */ -#ifndef HH_singleton_ -#define HH_singleton_ 1 +#ifndef HH_SENF_Utils_singleton_ +#define HH_SENF_Utils_singleton_ 1 // Custom includes #include @@ -55,15 +55,15 @@ namespace senf { : public senf::singleton { // Must have default constructor - SomeClass(); - + SomeClass(); + // Give singleton access to the constructor friend class senf::singleton; public: // By default 'instance()' is protected. If you want, you may make it public: using senf::singleton::instance; - + // ... }; @@ -74,7 +74,7 @@ namespace senf { SomeClass::instance().doSomething(); } \endcode - + \warning The singleton class should \e not have any static data members since it cannot be guaranteed, that these members will be constructed before the singleton instance. @@ -88,19 +88,24 @@ namespace senf { : boost::noncopyable { protected: + singleton(); + ~singleton(); + static Self & instance(); ///< Return singleton instance + static bool alive(); ///< Return \c true, if instance ok, \c false otherwise private: /** \brief Internal \internal */ - struct force_creation + struct force_creation { force_creation(); void nop() const; }; static force_creation creator_; + static bool alive_; }; }