为什么这个单例实现有效?

时间:2014-03-25 17:06:30

标签: c++ singleton

今天我看到了使用Singleton的这种模式,它让我很困惑。

class Singleton{
public:
    static Singleton& getInstance();
};

Singleton& Singleton::getInstance(){
    static Singeton instance;
    return instance;
}
int main(){
    Singleton &inst = Singleton::getInstance();
    Singleton &inst2 = Singleton::getInstance();
    std::cout << &inst << " " << &inst2;
}

指针的输出是相同的。 Here就是一个例子。我真的很困惑。我希望每次调用getInstance()来创建一个新的(虽然是静态的)单例实例。你能解释一下这个行为吗?

1 个答案:

答案 0 :(得分:3)

出于某种原因,您在此处发布的功能来源与您提供链接的页面不同:

static Singleton& getInstance(){
  static Singleton instance;
  return instance;
}

为什么会这样?函数中的静态局部对象instance只创建一次,这是第一次调用函数 - 因为它是static。下次调用该函数时,它会返回对同一对象的引用。