最近,我广泛使用以下getInstance()方法阅读了一些C++代码:
class S
{
private:
int some_int = 0;
public:
static S& getInstance()
{
static S instance; / (*) /
return instance;
}
};
从如何使用此代码片段中,我了解到getInstance()的工作方式类似于
return this
,返回了class S
实例的地址(或ref)。但是我很困惑。1)line(*)中定义的静态变量
S
在哪里分配在内存中?以及为什么它可以像return this
一样工作?2)如果存在不止一个
class S
实例,该实例的引用将被返回怎么办? 最佳答案
这就是所谓的Singleton design pattern。它的显着特征是该类只能有一个实例,而模式可以确保做到这一点。该类具有一个私有(private)构造函数和一个由getInstance
方法返回的静态创建的实例。您不能从外部创建实例,因此只能通过所述方法获取对象。
由于instance
在static
方法中是getInstance
,因此它将在多次调用之间保留其值。它是在第一次使用之前分配和构造的。例如。在this answer中,似乎GCC在首次使用该函数时初始化了静态变量。 This answer具有与此相关的C++标准的一些摘录。
关于c++ - getInstance()如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18997240/