C++再论单例模式
#include <iostream>
#include <windows.h>
#include <mutex>
std::mutex gmutex;
using namespace std;
template<typename Type>
class Singleton
{
public:
static Type* GetSingleton()
{
if (siglen == NULL)
{
unique_lock<std::mutex> lock(gmutex);//C++11加锁。
if (siglen == NULL)
{
siglen = new Type();
Type *temp = new Type();
MemoryBarrier();
siglen = temp;
}
}
return siglen;
}
private:
static Type* siglen;
};
template<typename Type>
Type* Singleton<Type>::siglen = NULL;
class Text
{
public:
Text()
{
data = 100;
//由于是单例模式。所以唯一会出现申请内存。调用构造
//函数。赋值三个步骤混乱的机会仅仅有在前面的1-2次
//的时候。可惜速度太快了。这样的情况发生的概率及其低
//,可是我们的心理要始终明确。
}
void Printf()
{
cout << "data="<<data << endl;
}
static DWORD WINAPI ThreadFunc(LPVOID arg)
{
Singleton<Text>::GetSingleton()->Printf();
return DWORD(0);
}
private:
int data;
};
int main()
{
HANDLE hThread;
DWORD threadId;
for (int i = 0; i < 10; i++)
{
hThread = CreateThread(NULL, 0, &(Text::ThreadFunc), (void *)"123",0, &threadId);
}
Sleep(5);
cout << "ThreadFunc is running!!!" << endl;
return 0;
}
#include <iostream>
using namespace std;
//引用计数的智能指针。
template<typename Type>
class my_auto_ptr
{
public:
my_auto_ptr(Type* p = NULL) :ptr(p)
{
count = new int[1];
count[0] = 1;
}
my_auto_ptr(const my_auto_ptr &ma)
{
count = ma.count;
count[0]++;
}
my_auto_ptr& operator=(const my_auto_ptr &ma)
{
if (this != &ma)
{
this->~my_auto_ptr();
count = ma.count;
count[0]++;
ptr = ma.ptr;
}
return *this;
}
~my_auto_ptr()
{
if (count!=NULL &&count[0]-- == 1)
{
cout << "~my_auto_ptr()" << endl;
delete ptr;
ptr = NULL;
delete[] count;
count = NULL;
}
}
Type* operator->()
{
return ptr;
}
Type& operator*()
{
return *ptr;
}
private:
Type *ptr;
int *count;
};
int main()
{
my_auto_ptr<int> ps(new int(100));
my_auto_ptr<int> pb(ps);
my_auto_ptr<int> pd;
pd = pb;
return 0;
}
C++再论单例模式的更多相关文章
- 05-IOSCore - 单例模式、KVO
单例模式 是设计模式之一,使用频率高,让数据或对象在程序的各个地方都能访问,保持唯一 要素: 各个地方都能访问方法 + 静态消息 只要导入类 就能访问 保持唯一 1.在静态消息内限制对象的创建 2.外 ...
- DCL单例模式
我们第一次写的单例模式是下面这样的: public class Singleton { private static Singleton instance = null; public static ...
- Java项目(5)——单例模式的应用与研究
单例模式是非常别致的一个模式,非常少有人拿它跟其它模式相比,由于,单例模式非常easy,非常特别,作用就是保证一个类有唯一一个实例,并让一个全局变量使得它能被訪问.而保证这个类仅仅被实例化一次的办法就 ...
- Spring框架学习一
Spring框架学习,转自http://blog.csdn.net/lishuangzhe7047/article/details/20740209 Spring框架学习(一) 1.什么是Spring ...
- Spring------概述
Spring框架------概述: spring是j2ee应用程序框架,是轻量级的IOC和AOP的容器框架,主要是针对JAVABean的生命周期进行管理的轻量级容器,可以单独使用,也可以和Struts ...
- Android Context完全解析
Context类型 我们知道,Android应用都是使用Java语言来编写的,那么大家可以思考一下,一个Android程序和一个Java程序,他们最大的区别在哪里?划分界限又是什么呢?其实简单点分析, ...
- Android各种获取Context方法
首先讲一讲这四个函数的区别,后面还有我对context的一些理解区别如下所示: 原文链接http://stackoverflow.com/questions/6854265/getapplicatio ...
- Java实战之03Spring-01Spring概述
一.Spring概述 1.Spring是什么? Spring是分层的Java SE/EE应用 full-stack轻量级开源框架,以IoC(Inverse Of Control:反转控制)和AOP(A ...
- spring框架的一些技术总结
纵观现在互联网行业,java的地位依然不可动摇,因为java拥有着的众多开发人员和适用性广,技术与解决技术大部分开源等特点,因此java依然是众多众多开发行业作为互联网开发的首选,而说到开发,我们就不 ...
随机推荐
- spring-cloud-sleuth 学习资源
https://www.baeldung.com/spring-cloud-sleuth-single-application https://howtodoinjava.com/spring-clo ...
- vue 判断属性是否为object
//递归对象 var recursiveObject = Vue.extend({ name: 'recursive-object', template:[ '<ul>', '<li ...
- 利用MySQL数据库如何解决大数据量存储问题?
提问:如何设计或优化千万级别的大表?此外无其他信息,个人觉得这个话题有点范,就只好简单说下该如何做,对于一个存储设计,必须考虑业务特点,收集的信息如下:1.数据的容量:1-3年内会大概多少条数据,每条 ...
- 14-new和this
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- Android点击按钮拨打电话
代码改变世界 Android点击按钮拨打电话 public void callPhone(String str) { Intent intent=new Intent(); intent.setAct ...
- BZOJ 1778 [Usaco2010 Hol]Dotp 驱逐猪猡 ——期望DP
思路和BZOJ 博物馆很像. 同样是高斯消元 #include <map> #include <ctime> #include <cmath> #include & ...
- 填报志愿(codevs 2930)
题目描述 Description 高考已经结束,而志愿填报正在进行中- 吴校长的学校里有n位同学,每位同学有ki个愿意去的大学.而在吴老师的省份中,有m所大学有招生名额.根据往年的经验,对于每所大学( ...
- windows创建任务计划(周期执行bat脚本)
https://jingyan.baidu.com/article/ca00d56c767cfae99febcf73.html windows找到任务计划程序: 这台电脑->管理
- AC日记——美元汇率 洛谷 P1988
题目背景 此处省略maxint+1个数 题目描述 在以后的若干天里戴维将学习美元与德国马克的汇率.编写程序帮助戴维何时应买或卖马克或美元,使他从100美元开始,最后能获得最高可能的价值. 输入输出格式 ...
- spring data jpa使用原生sql查询
spring data jpa使用原生sql查询 @Repository public interface AjDao extends JpaRepository<Aj,String> { ...