单例模式的C++简单实现
来源:互联网 发布:amd优化游戏 编辑:程序博客网 时间:2024/05/29 12:48
一、懒汉模式
具体例子如下:
/** *懒汉式单例模式 */#include <iostream>using namespace std;/* 定义Singleton类,用来表示单例模式 */class Singleton{public:static Singleton *getInstance();private:Singleton();Singleton(const Singleton &other);Singleton &operator=(const Singleton &other);static Singleton *instance;};/* 实现Singleton类中的方法和静态数据成员 */Singleton *Singleton::getInstance(){return instance;}Singleton::Singleton(){cout << "Singleton()" << endl;}Singleton::Singleton(const Singleton &other){cout << "Singleton(const Singleton &other)" << endl;}Singleton &Singleton::operator=(const Singleton &other){cout << "Singleton &operator=(const Singleton &other)" << endl;}Singleton *Singleton::instance = new Singleton();/* 程序入口 */int main(){Singleton* s1 = Singleton::getInstance();Singleton* s2 = Singleton::getInstance();Singleton* s3 = Singleton::getInstance();cout << "s1 address is " << s1 << endl;cout << "s2 address is " << s2 << endl;cout << "s3 address is " << s3 << endl;return 0;}注意有内存泄漏。
二、饿汉模式
具体实现如下:
/** *饿汉式单例模式 */#include <iostream>#include <pthread.h>using namespace std;/* 定义Singleton类,用来表示单例模式 */class Singleton{public:static Singleton *getInstance();private:Singleton();Singleton(const Singleton &other);Singleton &operator=(const Singleton &other);static Singleton *instance;static pthread_mutex_t mutex;/* 定义一个内嵌类用于清除Singleton实例 */class DestroySingleton{public:~DestroySingleton();};static DestroySingleton destroyInstance;};/* 实现Singleton类中的方法和静态数据成员 */Singleton *Singleton::getInstance(){if(NULL == instance){pthread_mutex_lock(&mutex);/* 上锁 */if(NULL == instance){instance = new Singleton();}pthread_mutex_unlock(&mutex);/* 解锁 */}return instance;}Singleton::Singleton(){cout << "Singleton()" << endl;}Singleton::Singleton(const Singleton &other){cout << "Singleton(const Singleton &other)" << endl;}Singleton &Singleton::operator=(const Singleton &other){cout << "Singleton &operator=(const Singleton &other)" << endl;}Singleton *Singleton::instance = NULL;pthread_mutex_t Singleton::mutex = PTHREAD_MUTEX_INITIALIZER;Singleton::DestroySingleton Singleton::destroyInstance;/* 实现内部类DestroySingleton的析构函数 */Singleton::DestroySingleton::~DestroySingleton(){if(NULL != Singleton::instance){delete Singleton::instance;Singleton::instance = NULL;/* 防止野指针 */cout << "~DestroySingleton()" << endl;}}/* 程序入口 */int main(){Singleton* s1 = Singleton::getInstance();Singleton* s2 = Singleton::getInstance();Singleton* s3 = Singleton::getInstance();cout << "s1 address is " << s1 << endl;cout << "s2 address is " << s2 << endl;cout << "s3 address is " << s3 << endl;return 0;}注意多线程的同步问题,加锁与解锁。
阅读全文
0 0
- 【C++】单例模式的一种简单实现的模板
- 单例模式的简单代码实现
- C++单例模式的简单实现
- 单例模式的简单有用实现
- 单例模式的C++简单实现
- 单例模式的简单实现
- 单例模式的C++简单实现
- 【Objective-C】单例模式的实现
- Objective-C 单例模式的实现
- c++--Singleton单例模式的实现
- 单例模式简单实现
- (C++)设计模式------单例模式 singleton(简单的实现和对象释放的控制) -- 创建型模式
- 单例设计模式(C#) 简单模式
- Objective-C 【简单的单例模式引入】
- 单例模式的简单使用(QML调用C++)
- 简单的单件模式类(C#)
- 设计模式--单例模式 C++实现
- 【C++知识点】单例模式的简单实现
- C#基础-052 枚举、命名空间、索引器和运算符重载
- 用Visual Studio 2008编写C语言程序时的注意事项
- Pointers on C——10 Structures and Unions.10
- 【转】学习路线1
- 欢迎使用CSDN-markdown编辑器
- 单例模式的C++简单实现
- Pointers on C——10 Structures and Unions.11
- C# const VS readonly
- 轻量级框架SSH应用与开发——Hibernate之学习总结(初阶)
- Pointers on C——10 Structures and Unions.12
- 华为OJ第一题,Python与Java实现
- 总结数据结构中重要的排序算法
- 1008数组元素循环右移问题(模拟)
- 性能调优系列文章目录