C++单例模式
来源:互联网 发布:必应翻译软件下载 编辑:程序博客网 时间:2024/06/07 02:12
#include "stdafx.h"#include<iostream>using namespace std;class singleton1 //懒汉模式{public:static singleton1 *getInstance(){if(NULL == m_instance1){//Lock(); 可自己实现Lock类,或使用boost库中的if(NULL == m_instance1){m_instance1 = new singleton1();cout<<"singleton1 created!"<<'\n';}//Ulock();}return m_instance1;}static void destoryInstance(){if(NULL != m_instance1){delete m_instance1;m_instance1 = NULL;cout<<"delete singleton1"<<'\n';}}private:static singleton1 * m_instance1;singleton1(){};};singleton1 * singleton1::m_instance1 = NULL; //new singleton1();//懒汉式class singleton2 //饿汉模式{public:static singleton2 *getInstance(){//因为静态初始化在程序开始时,也就是进入主函数之前,由主线程以单线程方式完成了初始化,//所以静态初始化实例保证了线程安全性。static singleton2 instance2; //局部静态变量 cout<<"singleton2 created!"<<'\n';return &instance2;}private:singleton2(){};};class singleton3 //解决懒汉式的内存泄漏问题{public:static singleton3 * getInstance(){if(NULL == m_instance3){//Lock(); 可自己实现Lock类,或使用boost库中的if(NULL == m_instance3){m_instance3 = new singleton3();cout<<"singleton3 created!"<<'\n';}//Ulock();}return m_instance3;}private:singleton3(){}static singleton3 * m_instance3;class Gc{private:~Gc(){if(m_instance3 != NULL){delete m_instance3;m_instance3 = NULL;cout<<"delete m_instance3";}}};static Gc Gc;//定义一个静态成员变量,程序结束时,系统会自动调用它的析构函数 };singleton3 * singleton3::m_instance3 = NULL;int main(){singleton1 * instance1_1 = singleton1::getInstance();singleton1 * instance1_2 = singleton1::getInstance();if(instance1_1 == instance1_2)cout<<"instance1_1 == instance1_2"<<'\n';singleton2 * instance2_1 = singleton2::getInstance();singleton2 * instance2_2 = singleton2::getInstance();if(instance2_1 == instance2_2)cout<<"instance2_1 == instance2_2"<<'\n';singleton3 * instance3_1 = singleton3::getInstance();singleton3 * instance3_2 = singleton3::getInstance();if(instance3_1 == instance3_2)cout<<"instance3_1 == instance3_2"<<'\n';instance1_1->destoryInstance(); //手动delete,instance1_1//instance2_1 在程序结束后会自动析构 //instance3_1 在程序运行结束时,系统会调用singleton3的静态成员Gc的析构函数,该析构函数会进行资源的释放while(1);return 0;}
0 0
- C#单例模式
- C#-单例模式
- 单例模式(C++)
- 【C++】单例模式
- [C++]单例模式
- 单例模式(C++)
- C ++的单例模式
- 【C++】Chapter17:单例模式
- Object-c单例模式
- Objectove-c单例模式
- Objective C--单例模式
- Objective C--单例模式
- Objective C 单例模式
- Objective C--单例模式
- 单例模式(C#)
- 单例模式(C#)
- object-c 单例模式
- c++-单例模式Singleton
- Java使用Jacob转换Word为HTML 中文乱码
- CSS样式覆盖规则
- Android findViewById()找不到自定义View对象的一种原因
- 微信、手Q、Qzone之x5内核inspect调试解决方案
- Python 之 深拷贝和浅拷贝 1
- C++单例模式
- 开篇
- HashMap、HashSet和HashTable详解
- Android网络:HTTP之利用HttpURLConnection访问网页、获取网络图片实例
- 《我的RobotFramework书》 - 篇首
- python中切换工作目录
- Kinect2入门+opencv画骨架+骨架数据
- 无聊时做的简易计算器
- Activity和Fragment的回退