博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++再论单例模式
阅读量:6245 次
发布时间:2019-06-22

本文共 1973 字,大约阅读时间需要 6 分钟。

#include 
#include
#include
std::mutex gmutex;using namespace std;template
class Singleton{public: static Type* GetSingleton() { if (siglen == NULL) { unique_lock
lock(gmutex);//C++11加锁。 if (siglen == NULL) { siglen = new Type(); Type *temp = new Type(); MemoryBarrier(); siglen = temp; } } return siglen; }private: static Type* siglen;};template
Type* Singleton
::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; }

转载地址:http://oaoia.baihongyu.com/

你可能感兴趣的文章
C#控制台"*"绘制空心菱形
查看>>
Android中JNI编程详解
查看>>
演练Ext JS 4.2自定义主题
查看>>
【tensorflow】1.安装Tensorflow开发环境,安装Python 的IDE--PyCharm
查看>>
【maven】 pom.xml详解
查看>>
LINQ中的OrderBy实现多字段升序、降序排序实现
查看>>
idea14导入eclipse项目并部署运行完整步骤
查看>>
杀死O2O的三大杀手?!
查看>>
<Android 应用 之路> 百度地图API使用(1)
查看>>
Java的结构之美【1】——构造对象
查看>>
Android双向滑动菜单完全解析,教你如何一分钟实现双向滑动特效
查看>>
「译」JavaScript 的怪癖 2:两个「空值」:undefined 和 null
查看>>
第一章 计算机系统漫游
查看>>
Android Activity 生命周期再验证
查看>>
shift-and 算法初体验
查看>>
sweetalert api中文开发文档和手册
查看>>
网络视频监控
查看>>
winter 2018 02 01 关于模运算的一道题
查看>>
stack的简单用法总结
查看>>
SpringCloud学习成长之路 五 路由器网关
查看>>