在共享库中全局声明的非 POD 对象的语义是啥?

Posted

技术标签:

【中文标题】在共享库中全局声明的非 POD 对象的语义是啥?【英文标题】:What are the semantics of non-POD objects declared globally in shared libraries?在共享库中全局声明的非 POD 对象的语义是什么? 【发布时间】:2014-08-24 14:24:52 【问题描述】:

如果在共享库中全局实例化具有重要构造函数和析构函数的 C++ 类,是否在加载库时调用其构造函数,同样,在卸载库时是否调用其析构函数?这是保证,还是经常发生?它永远不会发生吗?

【问题讨论】:

我相信共享库行为是特定于平台的,并且取决于所使用的 ABI。对于 ELF 定义了 ctor 和 dtor 列表,系统应该尊重它们。 相关解释:***.com/questions/19373061/…和***.com/questions/75701/… 【参考方案1】:

是的,构造函数和析构函数总是会在加载或卸载库时调用。

【讨论】:

你能引用一个来源吗?我什至不记得我为什么要问这个问题,那是差不多一年前的事了。但我还是想知道。

以上是关于在共享库中全局声明的非 POD 对象的语义是啥?的主要内容,如果未能解决你的问题,请参考以下文章

浅谈java static

如何在运行时确定共享库中全局变量的地址范围?

GCC中可执行文件的非GOT样式重定位

C++ 静态库中的共享全局变量

EGit 的“自动共享位于 git 存储库中的项目”选项是啥意思?

如何在 Angular JS 中声明一个不是服务但不会污染全局范围的对象?