class Singleton { public: static std::shared_ptr<Singleton> &GetInstance() { static std::shared_ptr<Singleton> instance = nullptr; if (!instance) { std::lock_guard<std::mutex> lock(Singleton::_mutex); if (!instance) { instance.reset(new Singleton()); } } return instance; } ~Singleton() {} private: Singleton() { } Singleton(const Singleton &) = delete; Singleton(Singleton &&) = delete; Singleton &operator=(const Singleton &) = delete; Singleton &operator=(Singleton &&) = delete; static std::mutex _mutex; }; std::mutex Singleton::_mutex;