-3

我很快就会在我的博客上发布一篇文章,但我想先确认我没有错过任何内容。

找到一个我错过的例子,我会在我的帖子中引用你。

主题是失败的Singleton implementations:在什么情况下你会不小心得到一个singleton的多个实例?

到目前为止,我想出了:

  • 第一次调用时的竞争条件instance()
  • 并入多个 DLL 或 DLL 和可执行文件
  • 单例的模板定义 - 实际上是单独的类

我还缺少任何其他方式——也许是继承?

4

2 回答 2

3

如果您使用在 cpp 文件中初始化的静态实例字段,如果某些静态/全局的初始化尝试获取单例的实例,您可以获得多个实例(甚至更糟糕的行为)。这是因为跨编译单元的静态初始化顺序是未定义的。

于 2008-09-13T05:57:30.653 回答
1

只要 ctor 是私有的,继承就不应该成为问题。

但是,如果您不禁止复制构造函数,用户可能会[无意]复制单例实例。从boost::noncopyable私下继承是防止这种情况的最简单方法。

于 2008-09-13T05:18:05.977 回答