2010-10-11 151 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中流动。