单例模式
饿汉式单例模式
饿汉式单例模式在类加载时就初始化实例,线程安全
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;
}