南平市建设局网站,阿图什网站,谷歌云 阿里云 做网站,富阳网站定制开发哪家公司好单例模式#xff08;Singleton Pattern#xff09;是一种设计模式#xff0c;用于确保一个类只有一个实例#xff0c;并提供一个全局访问点来访问该实例。在C中#xff0c;单例模式通常用于管理全局资源或共享状态。
以下是C中实现单例模式的几种常见方式#xff1a;
懒…单例模式Singleton Pattern是一种设计模式用于确保一个类只有一个实例并提供一个全局访问点来访问该实例。在C中单例模式通常用于管理全局资源或共享状态。
以下是C中实现单例模式的几种常见方式
懒汉式Lazy Initialization 懒汉式单例在第一次使用时才创建实例。
非线程安全版本
class Singleton {
public:static Singleton getInstance() {if (!instance) {instance new Singleton();}return *instance;}// 删除拷贝构造函数和赋值运算符Singleton(const Singleton) delete;Singleton operator(const Singleton) delete;private:Singleton() {} // 私有构造函数~Singleton() {} // 私有析构函数static Singleton* instance; // 静态实例指针
};Singleton* Singleton::instance nullptr; // 初始化静态成员线程安全版本使用双重检查锁定
#include mutexclass Singleton {
public:static Singleton getInstance() {if (!instance) {std::lock_guardstd::mutex lock(mutex);if (!instance) {instance new Singleton();}}return *instance;}Singleton(const Singleton) delete;Singleton operator(const Singleton) delete;private:Singleton() {}~Singleton() {}static Singleton* instance;static std::mutex mutex;
};Singleton* Singleton::instance nullptr;
std::mutex Singleton::mutex;饿汉式Eager Initialization 饿汉式单例在程序启动时即创建实例线程安全。
class Singleton {
public:static Singleton getInstance() {static Singleton instance; // 静态局部变量程序启动时初始化return instance;}Singleton(const Singleton) delete;Singleton operator(const Singleton) delete;private:Singleton() {}~Singleton() {}
};Meyer’s Singleton静态局部变量 这是C中最简洁的单例实现方式利用了静态局部变量的特性线程安全且懒加载。
class Singleton {
public:static Singleton getInstance() {static Singleton instance; // 静态局部变量线程安全且懒加载return instance;}Singleton(const Singleton) delete;Singleton operator(const Singleton) delete;private:Singleton() {}~Singleton() {}
};