一、单例模式
什么叫单例模式
就是一个类有且只有一个对象,并且只能通过接口获取到该对象
所以设计该类时,需要满足以下条件
1.构造函数私有化
2.禁止赋值和拷贝
3.提供获取到该类的接口
二、代码演示
1、简单的单例模式实现
#include <iostream>
using namespace std;
class MyClass
{
private:
MyClass(){ }; // 私有化构造函数
MyClass(MyClass&) = delete; // 禁止拷贝构造函数
MyClass& operator=(const MyClass&) = delete; // 禁止赋值运算符
public:
~MyClass() { };
public:
static MyClass* instance() { // 单例接口函数
if (nullptr == _instance) {
_instance = new MyClass();
}
return _instance;
}
private:
static MyClass *_instance;
};
MyClass *MyClass::_instance = nullptr;
int main(int arg, char **argv)
{
MyClass* a = MyClass::instance(); // 获取实例
MyClass* b = MyClass::instance(); // 获取实例
cout << "a=" << a << endl;
cout << "b=" << b << endl;
return 0;
}
*调试结果: a 和 b 是一样的,说明是同一个对象
2.如果在多线程下使用呢,我们修改下代码
#include <iostream>
#include <thread>
using namespace std;
class MyClass
{
private:
MyClass() // 私有化构造函数
{
// 假设初始化时需要的时间
this_thread::sleep_for(chrono::milliseconds(100));
};
MyClass(MyClass&) = delete; // 禁止拷贝构造函数