多个动态库具有相同的静态变量,有多少个实例?

发布于 2024-09-27 14:31:29 字数 167 浏览 3 评论 0原文

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

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

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

所有这些都是在 Ubuntu 中使用 C++ 实现的。

提前致谢

Let me explain it with an example:
I have a class S, which is static.

I have two dynamic libraries A and B that use S.

I have an application, that links with A and B, in this application, how many different instances of S are created?

All this using C++ and in Ubuntu.

Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夕嗳→ 2024-10-04 14:31:29

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

Both DLLs will use their own copy of the static variable.

假面具 2024-10-04 14:31:29

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

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

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

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

I just ran some quick tests and it seems that if you use Meyer's singleton to provide access to S (SomeClass):

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

there will be one instance of the global static variable under Linux i.e. shared among app and shared libs.

However AFAIR SomeClass needed to be contained in a DLL and not a static lib under windows: when SomeClass was part of a static lib I remember different instances flowing around in an application of mine and in my DLLs.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文