讓我來舉個例子來解釋一下吧: 我有一個S類,它是靜態的。具有相同靜態變量的多個動態庫有多少個實例?
我有兩個動態庫A和使用S.
我有一個應用程序B,即A和B的鏈接,在此應用中,有多少不同的情況下,S的創建?
所有這些使用C++和Ubuntu。
在此先感謝
讓我來舉個例子來解釋一下吧: 我有一個S類,它是靜態的。具有相同靜態變量的多個動態庫有多少個實例?
我有兩個動態庫A和使用S.
我有一個應用程序B,即A和B的鏈接,在此應用中,有多少不同的情況下,S的創建?
所有這些使用C++和Ubuntu。
在此先感謝
兩個DLL都將使用自己的靜態變量的副本。
如果這個變量來自另一個共享庫?因此,圖書館將按照菱形圖案進行鏈接。 此靜態變量或Singleton類的應用程序中將存在多少個副本? – Victor 2010-10-11 13:42:25
@Victor:它將是每個庫的一個副本,其中包含用於創建Singleton的代碼。所以,如果創建它的代碼只在一個庫中,那麼你只有一個副本。 – 2010-10-11 13:49:29
我只是跑一些快速測試,看來,如果你用邁爾的單,以提供對S(SomeClass的):
class SomeClass
{
public:
static SomeClass& getInstance()
{
static SomeClass someClass;
return someClass;
}
...
};
會有Linux的即共享下的全局靜態變量的一個實例應用程序和共享庫。
但是,AFAIR SomeClass需要包含在一個DLL中,而不是windows下的靜態庫:當SomeClass是靜態庫的一部分時,我記得不同的實例在我的應用程序和我的DLL中流動。
你是說你有一個S類的實例,它是靜態的還是全局的? – 2010-10-11 13:10:11
是的,實際上它是一個Singleton類,從A和B都使用。 – Victor 2010-10-11 13:25:55