跳到主要内容

单例模式

饿汉式单例模式

饿汉式单例模式在类加载时就初始化实例,线程安全

class Signleton{
private:
Signleton(){}
static Signleton* instance;
public:
static Singleton* getInstance(){
return instance;
}
void print(){
std::count << "Hello Signleton..." << std::endl;
}
}
// 静态成员变量初始化
Signleton* Signleton::instance = new Signleton();

int main(){
Signleton::getInstance()->print();
return 0;
}

懒汉式单例模式

懒汉式单例模式在第一次使用时初始化实例,懒加载,但需要考虑线程安全。

#include <iostream>
#include <mutex>

class Singleton {
private:
static Singleton* instance;
static std::mutex mutex;

Singleton() {}

public:
static Singleton* getInstance() {
if (instance == nullptr) {
std::lock_guard<std::mutex> lock(mutex);
if (instance == nullptr) {
instance = new Singleton();
}
}
return instance;
}

void print() {
std::cout << "Hello Singleton..." << std::endl;
}
};

// 静态成员变量初始化
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mutex;

int main() {
Singleton* singleton = Singleton::getInstance();
singleton->print();
return 0;
}