在 Linux 上,我有一些从定义全局变量的静态库生成的 C++ 代码。此全局变量的单个实例在引用其符号的两个共享库之间共享。
当进程关闭并运行静态终止阶段时,我看到这个共享实例上的析构函数运行了两次!大概每次卸载时每个库一次。
这个问题与我最近在这里看到的另一个问题密切相关:related question .这听起来像是相同的行为,但没有讨论为什么会发生。
有人知道这种行为背后的理论解释吗?
最佳答案
如果您将裸指针放入智能指针(两次),它将析构两次,每次容器引用计数降为零时一次。
因此,如果您将裸指针传递给两个库,就可以了。每一个都将它放在一个共享指针对象中,并且每一个都进行破坏。如果您可以在 dtor 期间看到堆栈回溯,那应该表明它在两个库中都发生了。
关于c++ - 在 Linux 上,为什么析构函数在 C++ 中的全局变量共享实例上运行两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3409034/