c++设计模式二,单例模式
来源:互联网 发布:python re模块 小甲鱼 编辑:程序博客网 时间:2024/04/30 01:40
单例模式有点像QT的copy_on_write,很多大臣拜见的皇帝,只有一个。体现在面向对象方面,CEmperor定义一个静态指针,和一个静态函数,私有化构造函数、析构函数、构造函数复制、重载赋值语句。
就是很多个指针却指向的同一个内存。
emperor.h头文件
#ifndef EMPEROR_H#define EMPEROR_H#include <iostream>using std::cout;using std::endl;using std::string;class CGarbo{public: CGarbo() { cout << "Create Garbo" << endl; } ~CGarbo() { cout << "Destroy Garbo" << endl; }};class CEmperor{public: static CEmperor * GetInstance(); static void ReleaseInstance(); void EmperorInfo(void); void SetEmperorTag(string tag);private: CEmperor(void); virtual ~CEmperor(void); CEmperor(const CEmperor&); CEmperor& operator=(const CEmperor&); static CEmperor *m_pEmperor; string m_EmperorTag; static CGarbo m_Garbo;};#endif // EMPEROR_Hemperor.cpp文件
#include "emperor.h"#include <iostream>using std::cout;using std::endl;using std::string;CEmperor* CEmperor::m_pEmperor = NULL;CEmperor::CEmperor(void){ cout << "Create CEmperor Instance" << endl;}CEmperor::~CEmperor(void){ cout << "Destroy CEmperor Instance and release its resource" << endl;}void CEmperor::EmperorInfo(void){ char msgBuffer[50] = { 0 }; sprintf_s(msgBuffer, 50, "皇ê帝?某3某3某3... ...(%s).", m_EmperorTag.c_str()); string msg(msgBuffer); cout << msg.c_str() << endl;}CEmperor* CEmperor::GetInstance(){ if (NULL == m_pEmperor) { if (NULL == m_pEmperor) m_pEmperor = new CEmperor(); } return m_pEmperor;}void CEmperor::ReleaseInstance(){ if (NULL != m_pEmperor) { if (NULL != m_pEmperor) { delete m_pEmperor; m_pEmperor = NULL; } }}void CEmperor::SetEmperorTag( string tag ){ m_EmperorTag = tag;}
main.cpp文件
#include <QCoreApplication>#include "emperor.h"#include <iostream>using std::cout;using std::endl;void DoIt(){ CEmperor *pEmperor1 = CEmperor::GetInstance(); pEmperor1->SetEmperorTag("95"); pEmperor1->EmperorInfo(); CEmperor *pEmperor2 = CEmperor::GetInstance(); pEmperor2->EmperorInfo(); CEmperor *pEmperor3 = CEmperor::GetInstance(); pEmperor3->EmperorInfo(); CEmperor *pEmperor4 = pEmperor3; pEmperor4->EmperorInfo(); CEmperor *pEmperor5 = NULL; pEmperor5 = pEmperor4; pEmperor5->EmperorInfo(); CEmperor::ReleaseInstance();}int main(int argc, char *argv[]){DoIt(); return 0;}
结果都一样,都是95,所以是同一块内存。只是返回了他的指针。
阅读全文
0 0
- 模式设计(二)------单例模式
- 设计模式之二--- 单例模式
- C++设计模式[二]单例模式
- 设计模式(二)--单例模式
- 设计模式(二)单例模式
- 【设计模式】二、单例模式
- 设计模式(二)-------->单例模式
- 设计模式(二):单例模式
- 设计模式之单例模式(二)
- 二、设计模式之一-----单例模式
- 【设计模式 二】单例模式
- c++设计模式二,单例模式
- 设计模式(二)单例模式
- 设计模式<二>单例模式
- 设计模式<二>单例模式
- (C#)设计模式 之 单例模式
- 设计模式--单例模式 C++实现
- 设计模式之单例模式(C++)
- SQL 优化
- 第一篇博客
- DynamicJasper输出动态报表
- 如何让Android WebView访问更快
- SN75176的引脚功能
- c++设计模式二,单例模式
- 保留小数,四舍五入
- LruCache分析
- RecycleView初体验
- HDU 2095 位异或
- SpringBoot文件上传下载和多文件上传(图文详解)
- Android样式的开发:layer-list篇
- Web.xml里的字符编码过滤器
- 多标签点击排序问题(获取点击标签的顺序等)