一、单件模式

本文详细介绍了单件模式的概念、应用场景以及实现方法。包括单件模式在资源占用大、实例计数、实例行为控制等场景下的优势,以及如何在多线程环境下正确实现单件模式。此外,还讨论了单件模式的注意事项,如构造函数和拷贝构造函数的声明方式,以及静态对象和智能指针两种实现方法的优缺点。

什么是单件模式?
简单的说就是:单件模式即一个类在整个程序运行过程中只能有一个实例(唯一对象),由它自身负责保存它的唯一实例,这个类可以保证没有其他实例可以被创建(截断创建新对象的请求),并且它可以提供一个全局访问点(例如Instance())。

什么情况下需要使用单件模式?
1、对于一个类(对象),如果它比较大(占用的系统资源非常多),而且这些资源可以被全局共享,则可以设计为singleton模式。
2、对于一个类,需要对实例进行计数。可以在Instance中进行,并可以对实例的个数进行限制。
3、对于一个类,需要对其实例的具体行为进行控制,例如,期望返回的实例实际上是自己子类的实例。这样可以通过Singleton模式,对客户端代码保持透明。

单件模式的实现方法?

1、是在Instance函数中使用静态对象。
2、是在单件类中使用一个静态指针。外部在第一次调用Instance函数时去初始化.
两种方法都各有优缺点,如果使用静态对象可以使代码看上去简单,且对象的构造和析构也是自动完成的;但是由于c++中的静态对象是在栈上分配内存的,所以对于>1M的对象可能会有些问题,而且如果面对的是一个庞大的系统时,如果所有的单件类的唯一实例都采用静态对象方法实现,那情况岂不更糟.
对于用指针的实现方法,它的好处是实例是开辟在堆上的,便是会带来两个问题:
一、应该在哪个地方去删除它?
对于删除问题,一种方法是采用在整个系统退出的时候,由某个类统一的去删除它们,另外也可以让单件类的唯一实例的生成也由该类来统一调用生成;另一种方法是采用智能指针的方式来实现,比如auto_ptr。

二、必须考虑多线程中同步互斥的问题,因为会发生同时new类对象的事情。
可以考虑使用封装一个类,内部采用临界区的方法来实现。

注意点:
单件模式首先就是要严格控制类的创建,与类创建相关的函数有两个:构造函数和拷贝构造函数,要想控制创建,就需要将这两个函数至少声明为protected甚至是private。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值