创建型模式,类负责创建自己的对象,并提供唯一的访问方式
意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。
主要解决:一个全局使用的类频繁地创建与销毁。
由于构造函数是私有的,因此无法通过构造函数实例化,唯一的方法就是通过调用静态函数GetInstance。
一个类的单例模式:
1,getInstance公用接口获取实例指针(static)
2,类的构造函数为私有,防止类在外部被多次实例化;实例指针(static)
支持继承的单例模式:
基类
1,getInstance公用接口获取实例指针(static)
2,构造函数为保护,子类可以访问
3,实例指针(static)
子类
1,私有构造函数,防止外界实例化
2,将基类声明为子类的友元类,使得基类可以创建子类的单例
应用于多线程环境中:创建实例时加锁
提高性能避免加锁操作:使用静态常量的实例指针,在进入主函数之前实例化
RAII机制
RAII是Resource Acquisition Is Initialization的简称,是C++语言的一种管理资源、避免泄漏的惯用法。利用的就是C++构造的对象最终会被销毁的原则。RAII的做法是使用一个对象,在其构造时获取对应的资源,在对象生命期内控制对资源的访问,使之始终保持有效,最后在对象析构的时候,释放构造时获取的资源。