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;