最近,我广泛使用以下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方法返回的静态创建的实例。您不能从外部创建实例,因此只能通过所述方法获取对象。

由于instancestatic方法中是getInstance,因此它将在多次调用之间保留其值。它是在第一次使用之前分配和构造的。例如。在this answer中,似乎GCC在首次使用该函数时初始化了静态变量。 This answer具有与此相关的C++标准的一些摘录。

关于c++ - getInstance()如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18997240/

10-08 21:36