用C++实现单例模式
来源:互联网 发布:缺德的医生 知乎 编辑:程序博客网 时间:2024/06/18 05:39
1.C++11
借助std::call_once和std::once_flag
#include<mutex>
template<typename T>
class Singleton{
public:
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
static T& instance(){
std::call_once(once_flag_, Singleton::init);
return *value_;
}
private:
static void init(){
value_ = new T();
}
private:
//由于会被static成员函数访问,所以这两个数据成员也需要是static的
static std::once_flag once_flag_;
static T* value_;
};
//std::once_flag是默认初始化的
template<typename T>
std::once_flag Singleton<T>::once_flag_;
template<typename T>
T* Singleton<T>::value_ = nullptr;
2.C++11
使用local static,C++11保证了,local static初始化时是多线程安全的。
template<typename T>
class Singleton{
public:
static T& instance(){
static T t;
return t;
}
};
就是如此简单
3.C++98
使用pthread_once缺点是只适用于POSIX平台,windows平台需要使用对应的移植库。
#include<pthread>
template<typename T>
class Singleton{
public:
static T& instance(){
pthread_once(&ponce_, &Singleton::init);
return *value_;
}
private:
Singleton(const Singleton&);
Singleton& operator=(const Singleton&);
Singleton();
~Singleton();
void init(){
value_ = new T();
}
private:
static pthread_once_t ponce_;
static T* value_;
};
template<typename T>
pthread_once_t Singleton<T>::ponce_ = PTHREAD_ONCE_INIT;
tempalte<typename T>
T* value_ = NULL;
- 设计模式--单例模式 C++实现
- (C++)用模板或宏实现单例模式
- (C++)用模板或宏实现单例模式
- Objective C 中实现单例模式
- Objective C 实现Singleton(单例)模式.
- Objective-C实现单例模式
- 【Objective-C】单例模式的实现
- objective-C 实现单例模式
- 单例模式代码实现(C++)
- 单例模式 (C语言实现)
- Objective-C实现单例模式
- Objective-C单例模式实现
- Objective-C 单例模式的实现
- Objective-c 实现单例设计模式
- c++--Singleton单例模式的实现
- 单例模式,C/C++实现
- 【C++】单例模式之C++实现
- C#单例模式
- jump-game(动态规划)
- 关于linux的基本认识
- python查询员工信息表
- Sorting Algorithm-Bubble Sort
- 编程之美读书笔记-数组循环移位
- 用C++实现单例模式
- Xcode7 使用NSURLSession发送HTTP请求的问题
- 简单排序--插入排序
- UI/UE/ID/UED/UCD的区别
- 算法时间复杂度
- poi 如何实现Excel合并单元格和设置内容
- hadoop 用过的命令
- HDU 4847
- java反射