创建型模式:单件模式
来源:互联网 发布:手机蓝牙软件 编辑:程序博客网 时间:2024/06/16 16:20
单件模式是为了保证类只有一个实体,并为它提供一个全局唯一的访问点。
class singleton
{
public:
~singleton(){}
static singleton* getInstance()
{
if(_instance == NULL)
{
_instance = new singleton();
}
return _instance;
private:
static singleton *_instance;
private:
singleton(){ }
singleton(const singleton&){ }
singleton& operator=(const singleton &){}
};
singleton *singleton::_instance = NULL;
说明:
使用时只需调用singleton::getInstance()既可以获取到singleton的指针,但是使用完后要自己释放内存,解决的办法有:
(1)手动调用delete singleton::getInstance()
(2)注册atexit()函数以释放内存
(3)使用智能指针
(4)利用c++内嵌类和一个静态成员实现自动释放机制
在多线程环境下使用,如果大量线程调用到new时,可能会造成内存泄露,并且有可能前后获取的singleton对象不一致,解决的办法是用锁机制。
#include <memory>
#include <iostream>
#include <windows.h>
using namespace std;
class lockguard
{
private:
CRITICAL_SECTION m_cs;
public:
lockguard() { InitializeCriticalSection(&m_cs); }
~lockguard() { DeleteCriticalSection(&m_cs); }
class cguard
{
public:
cguard(lockguard &lg) : m_lg(lg) { m_lg.guard(); }
~cguard() { m_lg.unguard(); }
private:
lockguard &m_lg;
};
private:
void guard() { EnterCriticalSection(&m_cs); }
void unguard() { LeaveCriticalSection(&m_cs); }
friend class lockguard::cguard;
};
class singleton
{
public:
~singleton() {}
static singleton* getInstance()
{
if(_instance == NULL)
{
lockguard::cguard gd(_lg);
if(NULL == _instance)
{
static clearer clr;
_instance = new singleton();
}
}
return _instance;
}
private:
static lockguard _lg;
static singleton *_instance;
private:
singleton() {}
singleton(const singleton&){ }
singleton& operator=(const singleton &) { }
class clearer
{
public:
clearer(){}
~clearer()
{
if(singleton::getInstance())
{
delete singleton::getInstance();
}
}
};
};
singleton *singleton::_instance = NULL;
lockguard singleton::_lg;
- (创建型模式)Singleton 单件模式
- (创建型模式)Singleton 单件模式
- 单件模式(创建型模式)
- 创建型模式:单件模式
- Singleton单件(创建型模式)
- Singleton单件(创建型模式)
- 单件模式学习总结(创建型)
- Singleton 单件(创建型模式)
- 关于Singleton 单件(创建型模式)
- 创建型模式-单件(Singleton)
- Singleton单件(创建型模式)
- Singleton 单件(创建型模式)
- 创建型模式:Singleton(单件)
- 设计模式-创建型-单件
- 设计模式单件(Singleton)---对象创建型模式
- 创建型模式——Singleton 单件模式
- 1. 单件模式(Singleton Pattern) ---------- 创建型模式
- 设计模式笔记(2)---单件模式(创建型)
- mysql如何跟踪执行的sql语句
- 管道通信(半双工)
- 算法导论—二分图
- ORACLE数据库事务隔离级别
- javaScript概述
- 创建型模式:单件模式
- cocoapods导致Xcode崩溃的解决办法
- I/O流与异常
- java学习感想
- ExtJS在传统模式、MVC模式下的使用区别
- poj 1112
- LeetCode|Minimum Depth of Binary Tree-java
- DNS消息格式
- ubuntu 15 搭建php开发环境