Singleton: Difference between revisions
Content added Content deleted
(Added non-thread-safe C++ version, subcategorized ObjC and C++ examples.) |
|||
Line 2: | Line 2: | ||
=={{header|C++}}== |
=={{header|C++}}== |
||
===Thread-safe=== |
|||
'''Operating System:''' Microsoft Windows NT/XP/Vista |
'''Operating System:''' Microsoft Windows NT/XP/Vista |
||
Line 42: | Line 44: | ||
</pre> |
</pre> |
||
===Non-Thread-Safe=== |
|||
This version doesn't require any operating-system or platform-specific features, but it is not safe in a multi-threaded environment. |
|||
<pre> |
|||
class Singleton |
|||
{ |
|||
public: |
|||
static Singleton* Instance() |
|||
{ |
|||
// Since it's a static variable, if the class has already been created, |
|||
// It won't be created again. |
|||
static Singleton myInstance; |
|||
// Return a pointer to our mutex instance. |
|||
return &myInstance; |
|||
} |
|||
// Any other public methods |
|||
protected: |
|||
Singleton() |
|||
{ |
|||
// Constructor code goes here. |
|||
} |
|||
~Singleton() |
|||
{ |
|||
// Destructor code goes here. |
|||
} |
|||
// And any other protected methods. |
|||
} |
|||
</pre> |
|||
=={{header|Objective-C}}== |
=={{header|Objective-C}}== |
||
===Non-Thread-Safe=== |
|||
(Using Cocoa's NSObject as a base class) |
(Using Cocoa's NSObject as a base class) |
||
<pre> |
<pre> |
Revision as of 03:29, 5 February 2008
![Task](http://static.miraheze.org/rosettacodewiki/thumb/b/ba/Rcode-button-task-crushed.png/64px-Rcode-button-task-crushed.png)
You are encouraged to solve this task according to the task description, using any language you may know.
A Global Singleton is a class of which only one instance exists within a program. Any attempt to use non-static members of the class involves performing operations on this one instance.
C++
Thread-safe
Operating System: Microsoft Windows NT/XP/Vista
class Singleton { public: static Singleton* Instance() { // We need to ensure that we don't accidentally create two Singletons HANDLE hMutex = CreateMutex(NULL, FALSE, "MySingletonMutex"); WaitForSingleObject(hMutex, INFINITE); // Create the instance of the class. // Since it's a static variable, if the class has already been created, // It won't be created again. static Singleton myInstance; // Release our mutex so that other application threads can use this function ReleaseMutex( hMutex ); // Return a pointer to our mutex instance. return &myInstance; } // Any other public methods protected: Singleton() { // Constructor code goes here. } ~Singleton() { // Destructor code goes here. } // And any other protected methods. }
Non-Thread-Safe
This version doesn't require any operating-system or platform-specific features, but it is not safe in a multi-threaded environment.
class Singleton { public: static Singleton* Instance() { // Since it's a static variable, if the class has already been created, // It won't be created again. static Singleton myInstance; // Return a pointer to our mutex instance. return &myInstance; } // Any other public methods protected: Singleton() { // Constructor code goes here. } ~Singleton() { // Destructor code goes here. } // And any other protected methods. }
Objective-C
Non-Thread-Safe
(Using Cocoa's NSObject as a base class)
// SomeSingleton.h @interface SomeSingleton : NSObject { // any instance variables } + (SomeSingleton*)sharedInstance; @end
// SomeSingleton.m @implementation SomeSingleton + (SomeSingleton*) sharedInstance { static sharedInstance = nil; if(!sharedInstance) { sharedInstance = [[SomeSingleton alloc] init]; } return sharedInstance; } @end