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

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

template
class Singleton{protected: Singleton(){} ~Singleton(){} class EConstuct { public: EConstuct() { } ~EConstuct() { if(Singleton::object !=NULL) delete Singleton::object; } };public: static Type *object; static EConstuct m_cons; static inline Type& instance() { if(object ==NULL) { printf("have construct \n"); object = new Type(); } return *object; }};template
Type* Singleton
::object =NULL;

网上的一般是这种模式,今天发现了另外一种模式,比较新颖

template
class Singleton2{public: Singleton2() { m_nReference++; if(m_object ==NULL) { m_object = new Type(); } } virtual ~Singleton2() { m_nReference --; if(m_nReference==0) { printf("Deleted \n"); delete m_object; m_object =NULL; breakPoint(); } } Type *instance() { return m_object; } Type* operator ->() const { return m_object; } private: static Type *m_object; static int m_nReference;};template
Type* Singleton2
::m_object =NULL;template
int Singleton2
::m_nReference =0;

使用起来也方便

int main(int argc, char* argv[]){    Singleton2
tmp ; tmp->data =10; printf("%d \n",tmp->data); Singleton2
temp; temp->data =40; printf("%d \n",tmp->data); temp.instance()->data =10; printf("%d \n",tmp->data); //printf("%f \n",Abc::instance().data); //Abc::instance().data =20; //printf("%f \n",Abc::instance().data); int gg; scanf("%d",&gg); return 0;}

 

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

你可能感兴趣的文章
sql语句分组/排序/计算总数/连接等sql语句书写
查看>>
MVC5 的MicrosoftOwinSecurity扩展插件——微信,QQ登录第三方源码
查看>>
分布式系统理论基础 - CAP
查看>>
mysql 用户管理和权限设置
查看>>
【项目管理和构建】十分钟教程,eclipse配置maven + 创建maven项目
查看>>
[转]Asp.Net大型项目实践(11)-基于MVC Action粒度的权限管理【续】【源码在这里】(在线demo,全部源码)...
查看>>
Numpy 的ndarray
查看>>
牛人博客 列表
查看>>
数据库连接池dataesoruce pool深入理解
查看>>
vuejs2.0使用Sortable.js实现的拖拽功能
查看>>
oracle多实例的启动与关闭
查看>>
码农生涯杂记_4
查看>>
利用jQuery设计横/纵向菜单
查看>>
unity游戏开发之NGUI的UISprite染色
查看>>
HDOJ find the safest road 1596【最短路变形】
查看>>
高度决定视野眼界决定世界
查看>>
shell脚本路径写法的注意点
查看>>
Testng生成的测试报告乱码解决办法
查看>>
vim快速入门
查看>>
大杂烩 -- 单向链表是否存在环或是否相交
查看>>