实现Singleton模式(要求熟练掌握)
https://blog.youkuaiyun.com/justloveyou_/article/details/64127789
单例模式的要求:类在内存中只能有一个实例
1.该对象不能是全局对象或者栈对象
2.该对象是一个堆对象
静态成员函数与普通成员函数的区别:https://blog.youkuaiyun.com/liujianfei526/article/details/50562881
单例模式的实现步骤:
1.将构造函数私有化
2.在类中定义一个静态的指针对象,并在类外初始化为空
3.定义一个返回值为类指针的静态成员函数,如果2中的指针对象为空,则初始化对象,以后再有对象调用该静态成员函数的时候,不在初始化对象,而是直接返回对象,保证类在内存中只有一个实例
单例对象的自动释放:
法一:嵌套类+静态对象
基类先创建,派生类后创建
嵌套类先创建,本类后创建
法二:atexit+destroy()
法三:pthread_once + atexit
pthread_once方法的作用:在多线程环境之下,其注册的函数只会被执行一次
生成对象的要求:
1.只能生成栈对象的方法:不能生成堆对象,不能通过new表达式在类之外生成对象
<1>将构造函数放入private区域
<2>operator new函数放入到private区域(采用)
但是要创建对象要求构造函数必须在public区域,故不能把构造函数放入private区域
所以只可以把operator new/delete函数private化
2.只能生成堆对象的方法:不能生成栈对象,不能在类之外调用构造函数或者析构函数
<1>将构造函数放到private区域(无法生成堆对象)
<2>将析构函数放到private区域
a)对于堆对象而言,执行delete表达式无法通过编译
b)在public区域定义一个destroy()(采用)
单例模式的代码:在虚拟机的C++_2019的目录下自己进行查看。
单例模式具有以下几个优点:
- 在内存中只有一个对象,节省内存空间;
- 避免频繁的创建销毁对象,可以提高性能;
- 避免对共享资源的多重占用,简化访问;
- 为整个系统提供一个全局访问点