#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++再论单例模式的更多相关文章

  1. 05-IOSCore - 单例模式、KVO

    单例模式 是设计模式之一,使用频率高,让数据或对象在程序的各个地方都能访问,保持唯一 要素: 各个地方都能访问方法 + 静态消息 只要导入类 就能访问 保持唯一 1.在静态消息内限制对象的创建 2.外 ...

  2. DCL单例模式

    我们第一次写的单例模式是下面这样的: public class Singleton { private static Singleton instance = null; public static ...

  3. Java项目(5)——单例模式的应用与研究

    单例模式是非常别致的一个模式,非常少有人拿它跟其它模式相比,由于,单例模式非常easy,非常特别,作用就是保证一个类有唯一一个实例,并让一个全局变量使得它能被訪问.而保证这个类仅仅被实例化一次的办法就 ...

  4. Spring框架学习一

    Spring框架学习,转自http://blog.csdn.net/lishuangzhe7047/article/details/20740209 Spring框架学习(一) 1.什么是Spring ...

  5. Spring------概述

    Spring框架------概述: spring是j2ee应用程序框架,是轻量级的IOC和AOP的容器框架,主要是针对JAVABean的生命周期进行管理的轻量级容器,可以单独使用,也可以和Struts ...

  6. Android Context完全解析

    Context类型 我们知道,Android应用都是使用Java语言来编写的,那么大家可以思考一下,一个Android程序和一个Java程序,他们最大的区别在哪里?划分界限又是什么呢?其实简单点分析, ...

  7. Android各种获取Context方法

    首先讲一讲这四个函数的区别,后面还有我对context的一些理解区别如下所示: 原文链接http://stackoverflow.com/questions/6854265/getapplicatio ...

  8. Java实战之03Spring-01Spring概述

    一.Spring概述 1.Spring是什么? Spring是分层的Java SE/EE应用 full-stack轻量级开源框架,以IoC(Inverse Of Control:反转控制)和AOP(A ...

  9. spring框架的一些技术总结

    纵观现在互联网行业,java的地位依然不可动摇,因为java拥有着的众多开发人员和适用性广,技术与解决技术大部分开源等特点,因此java依然是众多众多开发行业作为互联网开发的首选,而说到开发,我们就不 ...

随机推荐

  1. menu JPopupMenu JTabbedPane

    菜单是GUI中最常用的组件,菜单不是Component类的子类,不能放置在普通容器中,不受布局管理器的约束,只能放置在菜单栏中. 菜单组件由菜单栏 (MenuBar).菜单(Menu)和菜单项(Men ...

  2. Apple Pay强势来袭,开发者应做的事情(转)

    "iOS8.1就已经有这个功能了,只是木有现在这么的火,现在的趋势是要火的节奏,因此很多电商平台B2B,P2P,C2C,X2X都有可能需要这个屌丝的付款功能了,在此简单的研究一下." ...

  3. 计算几何 I. 极角

    参考资料 hankcs.com: POJ 1981 Circle and Points 题解 aswmtjdsj: POJ 1981 Circle and Points [定长圆覆盖最多点问题] zx ...

  4. BZOJ 2829 信用卡凸包 ——计算几何

    凸包裸题 #include <map> #include <cmath> #include <queue> #include <cstdio> #inc ...

  5. Spoj-BGSHOOT

    The problem is about Mr.BG who is a great hunter. Today he has gone to a dense forest for hunting an ...

  6. pageContext,request,session,application生命周期

    equest是封装client端(也就是用户通过browser)提交的请求数据和属性的对象. response是封装web server端响应数据和属性的对象. 我们经常会将pageContext.r ...

  7. linux 查看自己所在的公网ip

    curl members.3322.org/dyndns/getip 其他的方法还有: curl icanhazip.com curl ifconfig.me curl curlmyip.com cu ...

  8. leetcode 15. 3Sum 二维vector

    传送门 15. 3Sum My Submissions Question Total Accepted: 108534 Total Submissions: 584814 Difficulty: Me ...

  9. Andrew Stankevich's Contest (21) J dp+组合数

    坑爹的,,组合数模板,,, 6132 njczy2010 1412 Accepted 5572 MS 50620 KB C++ 1844 B 2014-10-02 21:41:15 J - 2-3 T ...

  10. WebView跳转到底部

    webview中有个computeVerticalScrollRange方法,是protected的,可以用反射,也可以自己写一个view继承webview,实现computeVerticalScro ...