我已经阅读了很多有关Singleton的信息,何时应该使用以及不应该使用它们,以及如何安全地实现它们。我正在用C ++ 11编写,并且遇到了迈耶的单例的懒惰初始化实现。
该实现是:
static Singleton& instance()
{
static Singleton s;
return s;
}
我从SO上的其他问题中了解到线程安全性如何,但是我不明白的是这实际上是单例模式。我已经用其他语言实现了单例,并且这些总是以类似于Wikipedia的示例的形式结束:
public class SingletonDemo {
private static volatile SingletonDemo instance = null;
private SingletonDemo() { }
public static SingletonDemo getInstance() {
if (instance == null) {
synchronized (SingletonDemo .class){
if (instance == null) {
instance = new SingletonDemo ();
}
}
}
return instance;
}
}
当我看第二个示例时,这是一个单例非常直观,因为该类持有对自身一个实例的引用,并且仅返回该实例。但是,在第一个示例中,我不明白这如何防止对象存在两个实例。所以我的问题是:
第一个实现如何执行单例模式?我认为它与static关键字有关,但我希望有人可以向我深入说明幕后情况。
在这两种实现方式之间,是否有一种比另一种更好?优缺点都有什么?
谢谢你的帮助,
LEATH
相关分类