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

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

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

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

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

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

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

//.h文件
#pragma once #include <stdio.h> class MyTestFunc { public: int m_chssposs; static MyTestFunc *chssposs[]; 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=) { return chssposs[i]; }; };
//. cpp文件

#include "MyTestFunc.h"

MyTestFunc* MyTestFunc::chssposs[]={};

int main()

{

for (int i=;i<;i++)

{

MyTestFunc *p=new MyTestFunc(i);

}

for (int i=;i<;i++)

{

printf("MyTestFunc::Instance(1)=%u\n",MyTestFunc::Instance(i));

}

}
运行结果:

MyTestFunc::Instance()=

MyTestFunc::Instance()=

MyTestFunc::Instance()=

MyTestFunc::Instance()=

MyTestFunc::Instance()=

请按任意键继续. . .

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

05-14 06:41