具有相同静态变量的多个动态库有多少个实例?
让我来举个例子来解释一下吧: 我有一个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