diff --git a/Singleton/main.cpp b/Singleton/main.cpp index 98187e8..58dafe1 100644 --- a/Singleton/main.cpp +++ b/Singleton/main.cpp @@ -1,9 +1,42 @@ #include +#include #include +#include + +class Singleton { +private: + static Singleton *singleton; + static std::mutex mutex; + + Singleton() = default; + +public: + Singleton(const Singleton &other) = delete; + Singleton &operator=(const Singleton &) = delete; + + static Singleton *GetInstance() { + std::lock_guard lock(mutex); + + if (singleton == nullptr) { + singleton = new Singleton(); + } + + return singleton; + } +}; + +Singleton *Singleton::singleton = nullptr; +std::mutex Singleton::mutex; int main(int argc, char *argv[]) { std::cout << "Singleton" << std::endl; + auto singleton1 = Singleton::GetInstance(); + auto singleton2 = Singleton::GetInstance(); + + std::cout << std::setw(20) << "Singleton 1: " << singleton1 << std::endl; + std::cout << std::setw(20) << "Singleton 2: " << singleton2 << std::endl; + return EXIT_SUCCESS; }