• C++多例模式下对Instance的使用


     最近工作中遇到这样一个问题:

            之前N年,公司用的都是一块CPU对应一块物理板,也就是,一块物理板只要一个实例化就可以了----俗称单例模式。

            现在突然要一块CPU对应多块物理板,妥妥的多例模式啊。但是之前的架构有事按照单例模式来的!

            其中有一点很让人头疼,兼容性问题。保证之前的代码的可用性(因为同事多个产品用到了这份代码);即:Instance的静态调用。

            这个static你说他好用,她也好用,不好用,也是真的不好用。因为static的缘故,我即使多实例化,但是最后instance还是只有一份,只想最后一个,而且代码中其他处,对这个instance进行的非空 判断。着实让人脑壳疼。

            于是就在网上找啊,找啊。发现这方面的确什么人在讲。其实讲多例模式的都少的可伶,又想到我大学里,老师压根儿连堆中实例化,也没见过,更别说这个了。所以只能自己动手写一个了。

           还好最终给我东拼西凑的,倒是把功能实现了,下面直接看代码吧:   

    //.h文件 
    #pragma once
    
    #include <stdio.h>
    
    class MyTestFunc
    
    {
    
    public:
    
    int m_chssposs;
    
    static MyTestFunc *chssposs[12];
    
    MyTestFunc(int i)
    
    {
    
    m_chssposs=i;
    
    chssposs[i]=this;
    
    }
    
    ~MyTestFunc(void)
    
    {
    
    printf("chssposs[%d]=%u\n",m_chssposs,chssposs[m_chssposs]);
    
    };
    
    static MyTestFunc* Instance(int i=0)
    
    {
    
    return chssposs[i];
    
    };
    
    };
    //. cpp文件
    
    #include "MyTestFunc.h"
    
    MyTestFunc* MyTestFunc::chssposs[12]={0};
    
    int main()
    
    {
    
    for (int i=0;i<3;i++)
    
    {
    
    MyTestFunc *p=new MyTestFunc(i);
    
    }
    
    for (int i=0;i<5;i++)
    
    {
    
    printf("MyTestFunc::Instance(1)=%u\n",MyTestFunc::Instance(i));
    
    }
    
    }
    运行结果:
    
    MyTestFunc::Instance(1)=7162976
    
    MyTestFunc::Instance(1)=7163024
    
    MyTestFunc::Instance(1)=7163072
    
    MyTestFunc::Instance(1)=0
    
    MyTestFunc::Instance(1)=0
    
    请按任意键继续. . .

    才工作,能力有限,如有错误的地方,还请指出,不胜感激。

  • 相关阅读:
    jquery 插件 国外
    数据库层面记录操作日志
    VS2015 发布
    SSO 单点登录
    在C#程序中模拟发送键盘按键消息
    C#中的DBNull、Null、""和String.Empty
    .Net 中通用的FormatString格式符整理
    验证码图片生成代码
    C#操作Excel知识点
    C#获取存储过程的 Return返回值和Output输出参数值
  • 原文地址:https://www.cnblogs.com/Jlord/p/11203139.html
Copyright © 2020-2023  润新知