2010-10-11 186 views
0

讓我來舉個例子來解釋一下吧: 我有一個S類,它是靜態的。具有相同靜態變量的多個動態庫有多少個實例?

我有兩個動態庫A和使用S.

我有一個應用程序B,即A和B的鏈接,在此應用中,有多少不同的情況下,S的創​​建?

所有這些使用C++和Ubuntu。

在此先感謝

+0

你是說你有一個S類的實例,它是靜態的還是全局的? – 2010-10-11 13:10:11

+0

是的,實際上它是一個Singleton類,從A和B都使用。 – Victor 2010-10-11 13:25:55

回答

0

兩個DLL都將使用自己的靜態變量的副本。

+0

如果這個變量來自另一個共享庫?因此,圖書館將按照菱形圖案進行鏈接。 此靜態變量或Singleton類的應用程序中將存在多少個副本? – Victor 2010-10-11 13:42:25

+2

@Victor:它將是每個庫的一個副本,其中包含用於創建Singleton的代碼。所以,如果創建它的代碼只在一個庫中,那麼你只有一個副本。 – 2010-10-11 13:49:29

0

我只是跑一些快速測試,看來,如果你用邁爾的單,以提供對S(SomeClass的):

class SomeClass 
{ 
public: 
    static SomeClass& getInstance() 
    { 
    static SomeClass someClass; 
    return someClass; 
    } 
... 
}; 

會有Linux的即共享下的全局靜態變量的一個實例應用程序和共享庫。

但是,AFAIR SomeClass需要包含在一個DLL中,而不是windows下的靜態庫:當SomeClass是靜態庫的一部分時,我記得不同的實例在我的應用程序和我的DLL中流動。