今天我看到了使用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()
来创建一个新的(虽然是静态的)单例实例。你能解释一下这个行为吗?
答案 0 :(得分:3)
出于某种原因,您在此处发布的功能来源与您提供链接的页面不同:
static Singleton& getInstance(){
static Singleton instance;
return instance;
}
为什么会这样?函数中的静态局部对象instance
只创建一次,这是第一次调用函数 - 因为它是static
。下次调用该函数时,它会返回对同一对象的引用。