【问题标题】:Multiple dynamic libraries with the same static variables, how many instances?具有相同静态变量的多个动态库,有多少个实例?
【发布时间】:2010-10-11 12:56:58
【问题描述】:

让我用一个例子来解释一下: 我有一个 S 类,它是静态的。

我有两个使用 S 的动态库 A 和 B。

我有一个应用程序,它与 A 和 B 链接,在这个应用程序中,创建了多少个不同的 S 实例?

所有这些都使用 C++ 和 Ubuntu。

提前致谢

【问题讨论】:

  • 你的意思是你有一个 S 类的实例,它是静态/全局的?
  • 是的,实际上它是一个 Singleton 类,A 和 B 都使用它。

标签: c++ dynamic static


【解决方案1】:

两个 DLL 都将使用它们自己的静态变量副本。

【讨论】:

  • 如果这个变量来自另一个共享库?因此,库将按照菱形图案链接。在这个静态变量或 Singleton 类的应用程序中会存在多少个副本?
  • @Victor:每个库都有一份副本,其中包含创建单例的代码。因此,如果用于创建它的代码仅在一个库中,那么您只有一个副本。
【解决方案2】:

我刚刚进行了一些快速测试,似乎如果您使用 Meyer 的单例来提供对 S (SomeClass) 的访问:

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

在 Linux 下会有一个全局静态变量的实例,即在应用程序和共享库之间共享。

然而,AFAIR SomeClass 需要包含在 DLL 中,而不是 Windows 下的静态库中:当 SomeClass 是静态库的一部分时,我记得在我的应用程序和我的 DLL 中流动的不同实例。

【讨论】:

    猜你喜欢
    • 2014-02-03
    • 2022-08-09
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多