C ++测验-单身人士
时间:2020-03-05 18:52:39 来源:igfitidea点击:
我很快将在我的博客上发布一篇文章,但我想证明自己没有错过任何东西。
查找我错过的示例,我将在帖子中引用我们。
主题是失败的Singleton实现:在什么情况下,我们会意外地获得Singleton的多个实例?
到目前为止,我想出了:
- 首次调用
instance()
时的竞争条件 - 合并到多个DLL或者DLL和可执行文件中
- 单例的模板定义-实际上是独立的类
还有其他我可能无法继承的方式吗?
解决方案
回答
只要ctor是私有的,继承就不成问题。
但是,如果我们不禁止复制构造函数,则用户可能[无意]复制单例实例。私自继承boost :: noncopyable是防止这种情况的最简单方法。
回答
如果使用在cpp文件中初始化的静态实例字段,则在某些静态/全局初始化尝试获取单例实例的情况下,可以获得多个实例(甚至更糟的行为)。这是因为未定义跨编译单元的静态初始化的顺序。