C ++测验 - 单身人士

时间:2008-09-13 04:40:38

标签: c++ oop design-patterns

我很快就会在my blog上发表一篇文章,但我想确认一下我没有错过任何内容。

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

主题是单例实现失败:在什么情况下你意外地获得单个实例的多个实例?

到目前为止,我已经提出:

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

我遗失的任何其他方式 - 也许是继承?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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