| 
    ACE 6.0.5 
   | 
 
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>


Public Member Functions | |
| virtual void | cleanup (void *param=0) | 
Static Public Member Functions | |
| static TYPE * | instance (void) | 
| Global access point to the Singleton.   | |
| static void | close (void) | 
| Explicitly delete the Singleton instance.   | |
| static void | dump (void) | 
| Dump the state of the object.   | |
Protected Member Functions | |
| ACE_Singleton (void) | |
| Default constructor.   | |
Static Protected Member Functions | |
| static ACE_Singleton< TYPE,  ACE_LOCK > *&  | instance_i (void) | 
| Get pointer to the Singleton instance.   | |
Protected Attributes | |
| TYPE | instance_ | 
| Contained instance.   | |
Static Protected Attributes | |
| static ACE_Singleton< TYPE,  ACE_LOCK > *  | singleton_ = 0 | 
| Pointer to the Singleton (ACE_Cleanup) instance.   | |
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 <ACE_Singleton<TYPE, ACE_LOCK> > instance is allocated here, not a <TYPE> instance. The reason for this is to allow registration with the ACE_Object_Manager, so that the Singleton can be cleaned up when the process exits. For this scheme to work, a (static) cleanup() function must be provided. ACE_Singleton 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;
 * | ACE_Singleton< TYPE, ACE_LOCK >::ACE_Singleton | ( | void | ) |  [inline, protected] | 
        
Default constructor.
| void ACE_Singleton< TYPE, ACE_LOCK >::cleanup | ( | void * | param = 0 | ) |  [virtual] | 
        
Cleanup method, used by ace_cleanup_destroyer to destroy the ACE_Singleton. 
Reimplemented from ACE_Cleanup.
| void ACE_Singleton< TYPE, ACE_LOCK >::close | ( | void | ) |  [static] | 
        
Explicitly delete the Singleton instance.
Reimplemented in ACE_Unmanaged_Singleton< TYPE, ACE_LOCK >.
| void ACE_Singleton< TYPE, ACE_LOCK >::dump | ( | void | ) |  [static] | 
        
Dump the state of the object.
Reimplemented in ACE_Unmanaged_Singleton< TYPE, ACE_LOCK >.
| TYPE * ACE_Singleton< TYPE, ACE_LOCK >::instance | ( | void | ) |  [static] | 
        
Global access point to the Singleton.
Reimplemented in ACE_Unmanaged_Singleton< TYPE, ACE_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< TYPE, ACE_LOCK >.
TYPE ACE_Singleton< TYPE, ACE_LOCK >::instance_ [protected] | 
        
Contained instance.
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< TYPE, ACE_LOCK >.
 1.7.4