【设计】单例模式--C++源代码(VS2015)
来源:互联网 发布:机器人软件编程 编辑:程序博客网 时间:2024/05/29 19:26
#include <iostream>
#include <Windows.h>
using namespace std;
CRITICAL_SECTION cs;
/*
单例模式
让类自身负责保存它唯一实例。
这个类保证没有其他实例被创建,并提供一个访问该实例的方法
*/
class Singleton
{
private :
int m;
Singleton() {}
Singleton(const Singleton&) {}
Singleton& operator=(const Singleton&) {}
static Singleton* instance;
public :
static Singleton* GetInstance();
void SetVal(int num)
{
m = num;
}
int GetVal()
{
return m;
}
};
/*
单例模式--饿汉
单例类定义的时候就进行实例化(static)
空间换时间
*/
/*
Singleton* Singleton::instance = new Singleton();
Singleton* Singleton::GetInstance()
{
return instance;
}
*/
/*
单例模式--懒汉
单例类使用的时候就进行实例化
时间换空间
*/
Singleton* Singleton::instance = NULL;
Singleton* Singleton::GetInstance()
{
/*
Double-CheckLocking
*/
if (NULL == instance)
{
EnterCriticalSection(&cs);
if (NULL == instance)
{
instance = new Singleton();
}
LeaveCriticalSection(&cs);
}
return instance;
}
int main()
{
InitializeCriticalSection(&cs);
Singleton* s1 = Singleton::GetInstance();
Singleton* s2 = Singleton::GetInstance();
printf("&s1 = %p\t&s2 = %p\n", s1, s2);
s1->SetVal(10);
s2->SetVal(20);
printf("&s1->GetVal() = %d\t&s2->GetVal() = %d\n", s1->GetVal(), s2->GetVal());
if (s1 == s2)
{
cout << "instance1==instance2" << endl;
}
else
{
cout << "instance1!=instance2" << endl;
}
system("pause");
return 0;
}
#include <Windows.h>
using namespace std;
CRITICAL_SECTION cs;
/*
单例模式
让类自身负责保存它唯一实例。
这个类保证没有其他实例被创建,并提供一个访问该实例的方法
*/
class Singleton
{
private :
int m;
Singleton() {}
Singleton(const Singleton&) {}
Singleton& operator=(const Singleton&) {}
static Singleton* instance;
public :
static Singleton* GetInstance();
void SetVal(int num)
{
m = num;
}
int GetVal()
{
return m;
}
};
/*
单例模式--饿汉
单例类定义的时候就进行实例化(static)
空间换时间
*/
/*
Singleton* Singleton::instance = new Singleton();
Singleton* Singleton::GetInstance()
{
return instance;
}
*/
/*
单例模式--懒汉
单例类使用的时候就进行实例化
时间换空间
*/
Singleton* Singleton::instance = NULL;
Singleton* Singleton::GetInstance()
{
/*
Double-CheckLocking
*/
if (NULL == instance)
{
EnterCriticalSection(&cs);
if (NULL == instance)
{
instance = new Singleton();
}
LeaveCriticalSection(&cs);
}
return instance;
}
int main()
{
InitializeCriticalSection(&cs);
Singleton* s1 = Singleton::GetInstance();
Singleton* s2 = Singleton::GetInstance();
printf("&s1 = %p\t&s2 = %p\n", s1, s2);
s1->SetVal(10);
s2->SetVal(20);
printf("&s1->GetVal() = %d\t&s2->GetVal() = %d\n", s1->GetVal(), s2->GetVal());
if (s1 == s2)
{
cout << "instance1==instance2" << endl;
}
else
{
cout << "instance1!=instance2" << endl;
}
system("pause");
return 0;
}
阅读全文
0 0
- 【设计】单例模式--C++源代码(VS2015)
- 【设计】工厂模式--C++源代码(VS2015)
- 设计模式(C++) -----单例模式
- 单例模式的设计(C++)
- 设计模式——单例模式 Java源代码
- 设计模式之单例模式(C++)
- 设计模式 - 线程安全的单例模式(C#)
- C语言和设计模式(之单例模式)
- 设计模式——单例模式(c++)
- 设计模式——单例模式(C++)
- 【设计模式】单例模式(Unity3D/C#)
- (C#)设计模式 之 单例模式
- 设计模式--单例模式 C++实现
- 设计模式之单例模式(C++)
- 【设计模式C++】单例模式
- 单例设计模式(C#) 简单模式
- 单例设计模式(C#) 懒汉模式
- C#--设计模式之单例模式
- 查看更多和收起的js
- C#知识点整理(1)-委托
- SpringMVC上传文件
- 线程同步基础(二)
- iOS数据存储方法大全
- 【设计】单例模式--C++源代码(VS2015)
- OpenCV
- 各大公司笔试面试经-Java软件工程师
- delphi 基于模型驱动的表单拓展组件的设计与实现。
- BZOJ3750: [POI2015]Pieczęć
- 关于Xcode9拖拽文件无法识别
- Centos7更改默认启动模式
- 我女朋友是个程序员……# 1
- 招了一层楼的程序员,东西却做不好?