饿汉模式
class Singleton {
public:
static Singleton &GetInstance() {
static Singleton instance;
return instance;
}
protected:
Singleton() = default;
~Singleton() = default;
private:
Singleton(const Singleton &) = delete;
Singleton(Singleton &&) = delete;
Singleton &operator=(const Singleton &) = delete;
Singleton &operator=(Singleton &&) = delete;
};
int main() {
auto &inst = Singleton::GetInstance();
}
懒汉模式
class Singleton {
public:
static Singleton &GetInstance() {
static std::once_flag flag;
std::call_once(flag, [](){
instance.reset(new Singleton);
});
return *instance;
}
public:
~Singleton() = default;
protected:
Singleton() = default;
private:
Singleton(const Singleton&) = delete;
Singleton(Singleton&&) = delete;
Singleton &operator=(const Singleton&) = delete;
Singleton &operator=(Singleton&&) = delete;
private:
static std::unique_ptr<Singleton> instance;
};
std::unique_ptr<Singleton> Singleton::instance;
int main() {
auto &inst = Singleton::GetInstance();
}