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

請按任意鍵繼續. . .



才工作,能力有限,如有錯誤的地方,還請指出,不勝感激。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。