【发布时间】:2014-01-30 13:47:28
【问题描述】:
Meyers Singleton 是否在使用动态库的场景中工作?
IE。一个库定义单例,其他库使用它,每个库都在自己的编译单元中?
(我想没关系,但具体的架构是在 OS X 上带有框架的应用程序)
我正在使用 vanilla Meyers Singleton 模式:以下 Instance() 方法在实用程序类的头文件中内联定义(在动态库中定义):
static Logger& Instance()
{
static Logger singletonInstance;
return singletonInstance;
}
复制构造函数和operator= 被声明为私有且未实现,所以我们应该很好,对吧?
现在,如果我从主应用程序链接定义单例的库,我可以看到构造函数被 多次调用.. this 的地址不同,如果没有,我会期待所有的怪异有一个实际的单例,但有多个类的实例。
所以我想知道动态库方法是否搞砸了 Meyers 单例,或者是否每个编译单元(库、主应用程序)都包含单例的标头(有效地声明和定义实例() 方法)会得到“它自己的单例实例”?
真的不太清楚我的观察结果如何,因此非常感谢任何提示!
【问题讨论】:
-
头文件中的
static Logger& Instance()是否应该用于在其他代码中获取实例?为什么不是extern? -
那是实际的代码吗?我期待
Logger::Instance().. -
@KarolyHorvath 是的,
Instance()是在单例的头文件中内联定义的。改写问题以使其更清楚..
标签: c++ macos design-patterns c++11 singleton