Singelton与静态库的行为

时间:2016-08-22 13:20:33

标签: c++ singleton libraries

我做了一个测试来检查共享库中的单例是否真的是唯一的。项目架构看起来像这样

      +----------+main+-----------+
      |            +              |
      |            |              |
      v            v              v
   plugin     dynamicLib     staticLib
(dynamicLib)        ^             ^
      +             |             |
      |             |             |
      +-------------+-------------+

staticLib和dynamicLib有一个单instance个getter和函数func,它只打印实例地址和名称。插件还有一个函数func,它获取库的单例实例并在它们上调用func。最后,main只调用所有三个func。令我惊讶的是输出结果是:

0x105bc20 Dynamic::func
0x105c050 Static::func
Now calling plugin...
Plugin: Calling libs ...
-------
0x105bc20 Dynamic::func
0x105c050 Static::func
-------

好的动态库中的单例显然总是独一无二的,但为什么静态库实例也是唯一的呢?我使用g ++(GCC)6.1.1在linux上编译了这个。这种标准行为在win / osx上是不同的? 你能否解释为什么静态libs实例是唯一的以及如何实现这一点。 Afaik符号应该在两个编译单元中定义。使用在getter中使用局部静态的maiers singleton是否起作用?

来源: http://www.filedropper.com/libtesttar

0 个答案:

没有答案