您的位置:首页 > 编程语言 > C语言/C++

23种设计模式之单例模式(创建型,3 Singleton,c++实现)

2018-02-26 12:49 731 查看
1 恶汉式
#include <iostream>
using namespace std;
class Singleton {private:
Singleton() {cout << "I am singleton object" << endl;}public:static Singleton* getInstance() {return __singleton;}
static void freeInstance() {if (__singleton != NULL) {delete __singleton;__singleton = NULL;}}private:static Singleton* __singleton;};
Singleton* Singleton::__singleton = new Singleton;
void main() {Singleton* s1 = Singleton::getInstance();Singleton* s2 = Singleton::getInstance();
if (s1 == s2){cout << "s1 is the same object as s2" << endl;}else {cout << "s1 is not the same object as s2" << endl;}
Singleton::freeInstance();}

2 懒汉式
#include "stdafx.h"#include <iostream>#include <Windows.h>#include <WinBase.h>#include <process.h>#include <mutex>
using namespace std;
mutex sLock;class Singleton {private:
Singleton() {cout << "Begin to execute construct function" << endl;Sleep(1000);cout << "End to execute construct function" << endl;}public:static Singleton* getInstance() {if (__singleton == NULL) {sLock.lock();if (__singleton == NULL) {__singleton = new Singleton;}sLock.unlock();}return __singleton;}
static void freeInstance() {if (__singleton != NULL) {delete __singleton;__singleton = NULL;}}
static void print() {cout << "printing\n";}private:static Singleton* __singleton;};
Singleton* Singleton::__singleton = NULL;
void MyThreadFunc(void *) {Singleton::getInstance()->print();}
void main() {HANDLE handle[10];for (int i = 0; i < 2; i++) {handle[i] = (HANDLE)_beginthread(MyThreadFunc, 0, NULL);}
for (int i = 0; i < 2; i++){WaitForSingleObject(handle[i], INFINITE);}
Singleton::freeInstance();}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: