mirror of
https://github.com/JakubVojvoda/design-patterns-cpp.git
synced 2025-12-16 20:37:05 +03:00
70 lines
1.2 KiB
C++
70 lines
1.2 KiB
C++
/*
|
|
* C++ Design Patterns: Singleton
|
|
* Author: Jakub Vojvoda [github.com/JakubVojvoda]
|
|
* 2016
|
|
*
|
|
* Source code is licensed under MIT License
|
|
* (for more details see LICENSE)
|
|
*
|
|
*/
|
|
|
|
#include <iostream>
|
|
|
|
/*
|
|
* Singleton
|
|
* has private static variable to hold one instance of the class
|
|
* and method which gives us a way to instantiate the class
|
|
*/
|
|
class Singleton
|
|
{
|
|
public:
|
|
// The copy constructor and assignment operator
|
|
// are defined as deleted, which means that you
|
|
// can't make a copy of singleton.
|
|
//
|
|
// Note: you can achieve the same effect by declaring
|
|
// the constructor and the operator as private
|
|
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;
|
|
}
|