懒汉模式:
- 在第一次使用单例对象时创建实例。
- 优点是节省内存,只有在需要时才会创建实例。
- 缺点是在多线程环境下可能会存在线程安全性问题,需要额外的同步措施来保证线程安全。
- 以下是一个简单的懒汉模式实现示例:
class Singleton { private: static Singleton* instance; Singleton() {} // 将构造函数设为私有,防止外部创建实例 public: static Singleton* getInstance() { if (instance == nullptr) { instance = new Singleton(); } return instance; } }; Singleton* Singleton::instance = nullptr; // 需要在类外初始化静态成员变量
#pragma once和Singleton* Singleton::instance = nullptr; 写在一起却多次引用头文件也会报multi define。
-
饿汉模式:
- 在类加载的时候就创建单例实例。
- 优点是简单,线程安全,不需要额外的同步措施。
- 缺点是可能会造成资源浪费,因为无论是否需要,实例都会被创建。
- 以下是一个简单的饿汉模式实现示例:
class Singleton
{
private:
static Singleton* instance;
Singleton() {}
public:
static Singleton* getInstance()
{
return instance;
}
};
Singleton* Singleton::instance = new Singleton();
- 单例模式中,类的静态成员需要在.cpp中初始化或者new