【发布时间】:2015-09-28 20:05:50
【问题描述】:
我试图了解 C++/Clang 如何处理模板中的静态成员。为此,我定义了一个Singleton 如下:
template <class T> class Singleton {
public:
static T* instance() {
if (!m_instance)
m_instance = new T;
return m_instance;
}
private:
static T* m_instance;
};
template <class T> T* Singleton<T>::m_instance = nullptr;
如果我的应用程序被编译为单个可执行文件,这似乎工作得很好。当我开始使用插件时,即使用dlopen 打开的dylibs,我得到了Singleton 的多个实例。
通常我用-fvisiblity=hidden 编译我的应用程序。如果删除该选项,这意味着我使用 default 可见性,那么 Singletons 会正常运行。这让我认为我只需要使用 __attribute__((visibility=default)) 导出符号,但这不起作用。
这里发生了什么,解决方案是什么?
【问题讨论】:
-
这可能会有所帮助:stackoverflow.com/questions/398069/…