我很快就会发布一篇文章 我的博客, ,但我想先确认一下我没有错过任何东西。

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

主题是失败的单例实现:什么情况下可以 偶然 获取单例的多个实例?

到目前为止,我已经想出了:

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

我还缺少其他什么方式吗——也许是继承?

有帮助吗?

解决方案

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

其他提示

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

但是,如果您不禁止复制构造函数,用户可能会故意复制单例实例。私人继承自 提升::不可复制 是防止这种情况的最简单方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top