最近我阅读了一些广泛使用以下 getInstance() 方法的 C++ 代码:
class S
{
private:
int some_int = 0;
public:
static S& getInstance()
{
static S instance; / (*) /
return instance;
}
};
从这个代码片段的使用方式中,我了解到 getInstance() 的工作原理如下return this
,返回实例的地址(或引用)class S
。但我很困惑。
1)静态变量在哪里S
在内存中分配的行(*)中定义?为什么它可以这样工作return this
?
2) 如果存在多个实例怎么办class S
,谁的参考将被返回?
这就是所谓的辛格尔顿设计模式 http://en.wikipedia.org/wiki/Singleton_pattern。其显着特征是该类只能有一个实例,并且该模式确保了这一点。该类有一个私有构造函数和一个静态创建的实例,该实例随getInstance
方法。您无法从外部创建实例,因此只能通过所述方法获取对象。
Since instance
is static
in the getInstance
方法它将在多次调用之间保留其值。它是在第一次使用之前的某个时候分配和构造的。例如。在这个答案 https://stackoverflow.com/a/55548/73070看起来 GCC 在第一次使用函数时初始化了静态变量。这个答案 https://stackoverflow.com/a/58804/73070有一些与此相关的 C++ 标准摘录。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)