`
ouyida3
  • 浏览: 48290 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

在单例中少用static的解决方案

    博客分类:
  • c++
 
阅读更多

    由于单例和static在内存中的存放位置不一样,而有些应用不管是使用单例还是使用static都是为了共用某个成员,如果混合使用,比如单例里面又使用了static,就会导致某些成员不能保持一致。

最好的解决方案是如果使用了单例,那么单例里成员就不要再使用static,也不要使用static的全局变量。但是如果我设计这个class时还不确定是否使用单例,那可以使用static,只是单例时不使用这个static成员即可。

 

原有流程:

<!--[if gte mso 9]><xml> <o:OLEObject Type="Embed" ProgID="Visio.Drawing.11" ShapeID="_x0000_i1025" DrawAspect="Content" ObjectID="_1437833746"> </o:OLEObject> </xml><![endif]-->



 

改造后流程:

<!--[if gte mso 9]><xml> <o:OLEObject Type="Embed" ProgID="Visio.Drawing.11" ShapeID="_x0000_i1026" DrawAspect="Content" ObjectID="_1437833748"> </o:OLEObject> </xml><![endif]-->



 

 

DetailbillMgr.h,增加成员变量m_AltibaseIntf

classDetailbillMgr

{

public:

    DetailbillMgr()

    {

        m_AltibaseIntf = NULL;

    }

protected:// 改为private

    abdb::AltibaseIntf * m_AltibaseIntf;

};

 

DetailbillMgr.cpp,原来abdbi指向一个staticAltibaseIntf,改为指向DetailbillMgr的成员变量

abdb::AltibaseIntf * abdbi;

if(m_AltibaseIntf==NULL)

{

    m_AltibaseIntf = new abdb::AltibaseIntf;

}

m_AltibaseIntf =  abdb::connectAltibase(m_AltibaseIntf);

abdbi = m_AltibaseIntf;

 

改造前:

abdb::AltibaseIntf * abdbi = abdb::AltibaseIntf::getInstance();

abdbi =  abdb::connectAltibase(abdbi);

 

AltibaseIntf.hAltibaseIntf增加成员变量curTimeStamp,取代原有的static全局变量

classAltibaseIntf {

public:

    stringcurTimeStamp; 

};

 

AcctConnection.cpp,把原有的static变量curTimeStamp注释掉,采用新加的成员变量curTimeStamp

//当前时间戳

//static string curTimeStamp("");

if(handle->curTimeStamp < timeStamp)

{

    handle->disConnect();

    handle->setConnInfo(abdbUser, abdbPassWd, abdbDsn, abdbPort);

    handle->connect();

    handle->curTimeStamp = timeStamp;

}

 

改造后,用tuxedo单个测试,调用了5次没问题,第一次连接数据库,后面四次都不连接数据库。

用批量并发测试,tuxedo进程自增长后不报错,降落后也不报错。

  • 大小: 35.8 KB
  • 大小: 40.8 KB
分享到:
评论

相关推荐

    谈一谈iOS单例模式

    如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。 1、书写步骤 1)、创建类方法,返回对象实例.以shared default current开头。 2)、创建一个全局变量用来保存对象的引用 3)、判断对象是否...

    C#实现程序单例日志输出功能

    首先,在你的解决方案中,适当的目录中新建一个类,比如 LogManager: 编写如下代码: /// /// 日志管理 /// public class LogManager { private string _logDir; // 日志文件存放目录 private static ...

    二十三种设计模式【PDF版】

    之道 》,其中很多观点我看了很受启发,以前我也将"设计模式" 看成一个简单的解决方案,没有从一种高度来看待"设计模式"在软 件中地位,下面是我自己的一些想法: 建筑和软件某些地方是可以来比喻的 特别是中国传统建筑...

    (java se 代码)Bank Account Management System 银行账户管理子系统

    解决方案: 1)采用对象序列化和反序列化技术。 2)将全部账户信息采用对象序列化的方式存放在文件中。 提示: 1) 使用文件来保存各种账户的信息,将注册、存款、取款、转账、修改之后的信息要及时的保存到文件中...

    java 面试题 总结

    在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。...

    超级有影响力霸气的Java面试题大全文档

    在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。...

    java面试题

    并发问题解决方案 59 71.7. Hibernate是如何延迟加载? 60 71.8. Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系) 60 71.9. 说下Hibernate的缓存机制 60 71.10. Hibernate的查询方式 60 71.11. 如何...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part1

    每个实例都经作者精心筛选,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。   本书适合PHP的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合PHP程序员参考、查阅。 目 录 目录:...

    PHP开发实战1200例(第1卷).(清华出版.潘凯华.刘中华).part2

    每个实例都经作者精心筛选,具有很强的实用性,其中一些实例是开发人员难于寻觅的解决方案。   本书适合PHP的初学者,如高校学生、求职人员作为练习、速查、学习使用,也适合PHP程序员参考、查阅。 目 录 目录:...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    180多页面试题,前前后后不间断的更新了...【Dubbo】dubbo使用中遇到的问题 174 【Zookeeper】zookeeper介绍 178 1、简介 178 2、基本概念 179 3. ZooKeeper典型应用场景 183 4、ZooKeeper在大型分布式系统中的应用 189

    传智播客扫地僧视频讲义源码

    11_二义性和虚继承解决方案 12_中午课程回顾 13_多继承原理抛砖_传智扫地僧 14_多态思想引言 15_类型兼容性原则遇上还是函数重写_面向对象新需求_传智扫地僧 16_多态案例_多态的意义_多态成立的三个条件_传智扫地僧 ...

Global site tag (gtag.js) - Google Analytics