#include <Singleton.h>
Inheritance diagram for ACE_Singleton
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. |
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.
|
Default constructor.
|
|
Cleanup method, used by to destroy the .
Reimplemented from ACE_Cleanup. |
|
Dump the state of the object.
Reimplemented in ACE_Unmanaged_Singleton. |
|
Global access point to the Singleton.
Reimplemented in ACE_Unmanaged_Singleton. |
|
Get pointer to the Singleton instance.
Reimplemented in ACE_Unmanaged_Singleton. |
|
Contained instance.
|
|
Pointer to the Singleton (ACE_Cleanup) instance.
Reimplemented in ACE_Unmanaged_Singleton. |