C++ 单例模式的设计意图
单例模式(Singleton Pattern) 是一种创建型设计模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。单例模式常用于需要全局唯一实例的场景,例如:
- 日志记录器:在整个应用程序中,只需要一个日志记录器实例来记录所有的日志信息。
- 配置管理器:应用程序的配置信息通常只需要一个实例来管理。
- 数据库连接池:在整个应用程序中,只需要一个数据库连接池实例来管理数据库连接。
单例模式的实现方式
单例模式的实现方式主要有两种:懒汉式(Lazy Initialization) 和 饿汉式(Eager Initialization)。
懒汉型单例模式
懒汉式单例模式在第一次使用时才创建实例,因此它具有延迟加载的特性。如果单例对象的创建成本较高,懒汉式可以在需要时才进行创建,从而提高性能。
#include <iostream>
#include <mutex>
class Singleton {
private:
static Singleton* instance;
static std::mutex mtx;
// 构造函数私有化,防止外部创建实例
Singleton() {
std::cout << "Singleton instance created." << std::endl;
}
public:
// 获取单例实例
static Singleton* getInstance() {
// 双重检查锁定,确保线程安全
if (instance == nullptr) {
std::lock_guard<std::mutex> lock(mtx);
if (instance == nullptr) {
instance = new Singleton();
}
}
return instance;
}
// 删除拷贝构造函数和赋值运算符,防止拷贝
Singleton(Singleton const&) = delete;
Singleton& operator=(Singleton const&) = delete;
// 销毁实例
static void destroyInstance() {
delete instance;
instance = nullptr;
}
// 测试方法
void showMessage() {
std::cout << "Hello from Singleton!" << std::endl;
}
};
// 静态成员变量初始化
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mtx;
int main() {
Singleton* s1 = Singleton::getInstance();
Singleton* s2 = Singleton::getIns