Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

ACE_Singleton Class Template Reference

A Singleton Adapter uses the Adapter pattern to turn ordinary classes into Singletons optimized with the Double-Checked Locking optimization pattern. More...

#include <Singleton.h>

Inheritance diagram for ACE_Singleton

Inheritance graph
[legend]
Collaboration diagram for ACE_Singleton:

Collaboration graph
[legend]
List of all members.

Public Methods

virtual void cleanup (void *param = 0)
 Cleanup method, used by to destroy the .


Static Public Methods

TYPE* instance (void)
 Global access point to the Singleton.

void dump (void)
 Dump the state of the object.


Protected Methods

 ACE_Singleton (void)
 Default constructor.


Protected Attributes

TYPE instance_
 Contained instance.


Static Protected Methods

ACE_Singleton<TYPE, ACE_LOCK>*& instance_i (void)
 Get pointer to the Singleton instance.


Static Protected Attributes

ACE_Singleton<TYPE, ACE_LOCK>* singleton_ = 0
 Pointer to the Singleton (ACE_Cleanup) instance.


Detailed Description

template<class TYPE, class ACE_LOCK> template class ACE_Singleton

A Singleton Adapter uses the Adapter pattern to turn ordinary classes into Singletons optimized with the Double-Checked Locking optimization pattern.

This implementation is a slight variation on the GoF Singleton pattern. In particular, a single > instance is allocated here, not a <TYPE> instance. The reason for this is to allow registration with the , so that the Singleton can be cleaned up when the process exits. For this scheme to work, a (static) <cleanup> function must be provided. provides one so that TYPE doesn't need to. If you want to make sure that only the singleton instance of <T> is created, and that users cannot create their own instances of <T>, do the following to class <T>: (a) Make the constructor of <T> private (or protected) (b) Make Singleton a friend of <T> Here is an example:

 * class foo
 * {
 * friend class ACE_Singleton<foo, ACE_Null_Mutex>;
 * private:
 * foo () { cout << "foo constructed" << endl; }
 * ~foo () { cout << "foo destroyed" << endl; }
 * };
 * typedef ACE_Singleton<foo, ACE_Null_Mutex> FOO;
 * 

NOTE: the best types to use for ACE_LOCK are ACE_Recursive_Thread_Mutex and ACE_Null_Mutex. ACE_Recursive_Thread_Mutex should be used in multi-threaded programs in which it is possible for more than one thread to access the > instance. ACE_Null_Mutex can be used otherwise. The reason that these types of locks are best has to do with their allocation by the ACE_Object_Manager. Single ACE_Recursive_Thread_Mutex and ACE_Null_Mutex instances are used for all ACE_Singleton instantiations. However, other types of locks are allocated per ACE_Singleton instantiation.


Constructor & Destructor Documentation

template<classTYPE, classACE_LOCK>
ACE_INLINE ACE_Singleton< TYPE,ACE_LOCK >::ACE_Singleton<TYPE, ACE_LOCK> ( void ) [protected]
 

Default constructor.


Member Function Documentation

template<classTYPE, classACE_LOCK>
void ACE_Singleton<TYPE, ACE_LOCK>::cleanup ( void * param = 0 ) [virtual]
 

Cleanup method, used by to destroy the .

Reimplemented from ACE_Cleanup.

template<classTYPE, classACE_LOCK>
void ACE_Singleton<TYPE, ACE_LOCK>::dump ( void ) [inline, static]
 

Dump the state of the object.

Reimplemented in ACE_Unmanaged_Singleton.

template<classTYPE, classACE_LOCK>
TYPE * ACE_Singleton<TYPE, ACE_LOCK>::instance ( void ) [static]
 

Global access point to the Singleton.

Reimplemented in ACE_Unmanaged_Singleton.

template<classTYPE, classACE_LOCK>
ACE_Singleton< TYPE,ACE_LOCK >*& ACE_Singleton<TYPE, ACE_LOCK>::instance_i ( void ) [static, protected]
 

Get pointer to the Singleton instance.

Reimplemented in ACE_Unmanaged_Singleton.


Member Data Documentation

template<classTYPE, classACE_LOCK>
TYPE ACE_Singleton<TYPE, ACE_LOCK>::instance_ [protected]
 

Contained instance.

template<classTYPE, classACE_LOCK>
ACE_Singleton< TYPE,ACE_LOCK >* ACE_Singleton<TYPE, ACE_LOCK>::singleton_ = 0 [static, protected]
 

Pointer to the Singleton (ACE_Cleanup) instance.

Reimplemented in ACE_Unmanaged_Singleton.


The documentation for this class was generated from the following files:
Generated at Sat Dec 1 11:05:11 2001 for ACE by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000