Implementation of designe pattern which can be compared to phoenix singleton with advanced instance life management. More...
Implementation of designe pattern which can be compared to phoenix singleton with advanced instance life management.
This module includes all the classes used to implement a phoenix singleton pattern design supporting shared libraires.
The phoenix singleton pattern design offers the possibility to have a special class with these properties :
This implementation offer also a support for shared libraries using one ingleton server with advanced controller of life time for each instances. This controller is a basic phoenix singleton stored in a shared library.
To access to a singleton we need to use the utilmm::singleton::use
class. This class will offer an acces to singleton instance and will manage the singleton life (it can be seen as a reference counting smart pointer.
For example if one class foo
need to access to a singleton of type bar
. User can code it asd this :
#include "utilmm/singleton/use.hh" class foo { private: utilmm::singleton::use<bar> bar_s; int value; public: foo():value(0) {} explicit foo(int v):value(v) {} ~foo() {} void send_to_bar() { bar_s.instance().send(value); // or bar_s->send(value); } };
To define a class singleton as a pure singleton (ie it is impossible to access to it except by utilmm::singleton::use
) one can follow this example :
#include "utilmm/singleton/wrapper_fwd.hh" class pure_singleton { public: // [...] private: pure_singleton(); ~pure_singleton(); // [...] friend class utilmm::singleton::wrapper<pure_singleton>; };
All the structors are defined as private then only firends (ie utilmm::singleton::wrapper
) can create and destroy the instance then we have the guarantee that this class is a pure phoenix singleton.