C ++测验-单身人士

时间:2020-03-05 18:52:39  来源:igfitidea点击:

我很快将在我的博客上发布一篇文章,但我想证明自己没有错过任何东西。

查找我错过的示例,我将在帖子中引用我们。

主题是失败的Singleton实现:在什么情况下,我们会意外地获得Singleton的多个实例?

到目前为止,我想出了:

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

还有其他我可能无法继承的方式吗?

解决方案

回答

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

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

回答

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