Singleton之C++部分一

本文探讨了C++中Singleton模式的多种实现方式,包括静态或全局变量、Meyers Singleton、DCLP(双检锁模式)及其在C++98和0x标准下的可靠性。同时讨论了多线程环境下Singleton的构造和析构顺序问题,以及如何通过简单锁和程序初始化策略来优化Singleton的使用。
摘要由CSDN通过智能技术生成

 

采用静态或者全局变量的实现方案

由于C++不能保证静态或者全局对象的构造函数的调用顺序以及析构顺序。所以如果程序中有多个用此方法实现的Singleton类,它们之间又有某种构造依赖关系和析构依赖关系,就会造成灾难性的后果。所以,只有当肯定不会有构造和析构依赖关系的情况下,这种实现才是合适的。

> 优点 实现简单,多线程下安全
> 缺点 如果有多个Singleton对象的创建顺序有依赖时,千万别用;不是lazy loading,有些浪费。

Meyers Singleton来控制构造顺序,但是不能控制析构顺序

Scott Meyer在<<Effective C++>>3rd Item4中提出了一个解决方案,当将non-local static变量移动到静态方法中成为local static变量的时候。C++保证当第一次静态方法被调用的时候,才会创建该静态变量。但是这里有一个疑问,创建顺序能够被控制了,可是析构顺序呢?我们只知道进程结束的时候,local static 变量会被析构,而且按照创建顺序的相反顺序进行。如果几个Singleton类的析构函数之间也有依赖关系,并且这种依赖顺序关系和LIFO顺序冲突,就会造成dead-reference问题。

> 优点
评论 51
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值