Singleton
Ensure a class only has one instance, and provide a global point of access to it.
Pattern has creational purpose and deals with object relationships, which are more
dynamic. The Singleton is often used as a part another design patterns.
When to use
- there must be exactly one instance of a class, and it must be accessible to clients from a well-known access point
- when the sole instance should be extensible by subclassing, and clients should be able to use an extended instance without modifying their code
#include <iostream>
class Singleton
{
public:
Singleton( Singleton const& ) = delete;
Singleton& operator=( Singleton const& ) = delete;
static Singleton* get()
{
if ( !instance )
{
instance = new Singleton();
}
return instance;
}
static void restart()
{
if ( instance )
{
delete instance;
}
}
void tell()
{
std::cout << "This is Singleton." << std::endl;
// ...
}
// ...
private:
Singleton() {}
static Singleton *instance;
// ...
};
Singleton* Singleton::instance = nullptr;
int main()
{
Singleton::get()->tell();
Singleton::restart();
return 0;
}