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

請按任意鍵繼續. . .

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM