饿汉:
1.构造析构私有化
2. 拷贝构造,=运算符重载删除
3. 静态函数GetInstance 返回指针避免多次拷贝
4. 类外直接初始化
class Singleton
{
private:
Singleton() = default;
~Singleton() = default;
public:
Singleton(Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
static Singleton* GetInstance() {
return &single;
}
private:
static Singleton single;
};
Singleton Singleton::single;```
懒汉:
1. 静态函数里面直接定义静态变量,第一次调用的时候初始化
```cpp
class Singleton
{
private:
Singleton() = default;
~Singleton() = default;
public:
Singleton(Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
static Singleton* GetInstance() {
static Singleton single;
return &single;
}
};