C++学习笔记(二十六)设计模式学习之单例模式

单例模式

作用:保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象

为什么需要单例模式?
  在多个线程之间,比如初始化一次socket资源
  在整个程序空间使用全局变量,共享资源

  大规模系统中,为了性能的考虑,需要节省对象的创建时间

实现单例步骤常用步骤 
  构造函数私有化
  提供一个全局的静态方法(全局访问点)

  在类中定义一个静态指针,指向本类的变量的静态变量指针

#include <iostream>
using namespace std;

// 懒汉式单单例
class UserManager
{
private:
UserManager()
{
cout << "构造函数被调用" << endl;
}


public:
static UserManager* GetInstance()
{
if (m_instance == NULL)
m_instance = new UserManager;


handle_count++;
return m_instance;
}


static void Release()
{
if (handle_count > 0)
handle_count--;


if (m_instance != NULL && handle_count == 0)
{
delete m_instance;
m_instance == NULL;
}
}


private:
static UserManager* m_instance;   // 对象指针,  句柄
static int handle_count;          // 引用计数
};


UserManager* UserManager::m_instance = NULL; 
int UserManager::handle_count  = 0;


// 饿汉式单例
class UserManager1
{
private:
UserManager1()
{
cout << "构造函数被调用" << endl;
}


public:
static UserManager1* GetInstance()
{
handle_count++;
return m_instance;
}


static void Release()
{
if (handle_count > 0)
handle_count--;


if (m_instance != NULL && handle_count == 0)
{
delete m_instance;
m_instance == NULL;
}
}


private:
static UserManager1* m_instance;   // 对象指针,  句柄
static int handle_count;          // 引用计数
};


UserManager1* UserManager1::m_instance = new UserManager1; 
int UserManager1::handle_count  = 0;


int main()
{
// 对象创建 -----> 调用构造函数  -----> 构造函数设为私有
UserManager *p1 = UserManager::GetInstance();
UserManager *p2 = UserManager::GetInstance();
if (p1 == p2)
cout << "两个对象相等" << endl;
else
cout << "两个对象不相等" << endl;   


UserManager::Release();


    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值