单例模式解释

单例是因为一个就足够了,多了浪费
class TestClass {
	private static $_instance;

	public static function getInstance(){
	if(!(self::$_instance instanceof self)){
		self::$_instance = new self;
	}
		return self::$_instance;
	}
}

实际中用作数据库连接类和工厂模式一起使用,根据参数调用单例模式,可以提高资源使用效率。
### C++ 中单例模式的实现与用法 #### 一、单例模式简介 单例模式是一种常用的设计模式,其核心目标是确保某一个类仅有一个实例存在,并提供全局访问点。这种模式广泛应用于需要集中管理资源或状态的应用场景中[^1]。 #### 二、基本实现方式 ##### 饿汉式 (Eager Initialization) 饿汉式的单例模式会在定义时立即创建对象实例,因此它天生具备线程安全性,但由于实例在程序启动时即被创建,可能会浪费不必要的内存空间。 ```cpp class Singleton { public: static Singleton* getInstance() { return &_instance; } private: Singleton() {} // 私有化构造函数防止外部实例化 ~Singleton() {} static Singleton _instance; // 定义静态成员变量作为唯一实例 }; // 初始化静态成员变量 Singleton Singleton::_instance; int main() { Singleton* s = Singleton::getInstance(); } ``` 这种方法简单直观,在多线程环境下无需额外同步措施即可安全使用[^1]。 ##### 懒汉式 (Lazy Initialization) 懒汉式只有当第一次调用 `getInstance()` 方法时才会创建实例,从而节省初始加载时间开销。然而,这种方式在线程并发情况下容易出现问题,除非采取适当保护手段来保证线程间的一致性[^2]。 ```cpp #include <iostream> using namespace std; class Singleton { public: static Singleton* getInstance() { if (_pInstance == nullptr) { // 双重检查锁定机制(Double-checked locking pattern),提高效率并保持线程安全 lock_guard<mutex> guard(_mtx); if (_pInstance == nullptr){ _pInstance = new Singleton(); atexit(destroy); // 注册清理回调函数 } } return _pInstance; } private: Singleton(){} ~Singleton(){} static Singleton* _pInstance; static mutex _mtx; static void destroy(){ delete _pInstance; _pInstance = nullptr; } }; Singleton* Singleton::_pInstance = nullptr; mutex Singleton::_mtx; int main(){ cout << Singleton::getInstance() << endl; cout << Singleton::getInstance() << endl; } ``` 通过引入互斥量(`std::mutex`)和双重校验锁技术(double-checked locking),可以有效解决多线程环境下的竞态条件(race condition)[^2]。 #### 三、注意事项 - **生命周期管理**:对于动态分配的对象来说,应该考虑何时销毁它们以释放占用资源。可以通过 `atexit` 或者智能指针等方式简化这一过程。 - **序列化支持**:如果应用程序涉及到持久存储,则需特别注意反序列化的时机是否会破坏单一实例原则。 - **跨平台兼容性**:不同编译器对静态局部变量初始化顺序可能存在差异,这可能影响某些特定形式的单例实现效果。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值