Singleton怀疑:我如何能够访问全局空间中的私有静态对象?代码如下。这完全没问题。
#include <iostream>
using namespace std;
class Singleton {
static Singleton s;
static void func()
{
cout<<"i am static function "<<endl;
}
int i;
Singleton(int x) : i(x) {
cout<<"inside Constructor"<<endl;
}
void operator=(Singleton&);
Singleton(const Singleton&);
public:
static Singleton& getHandle() {
return s;
}
int getValue() { return i; }
void setValue(int x) { i = x; }
};
Singleton Singleton::s(47);
int main() {
Singleton& s = Singleton::getHandle();
cout << s.getValue() << endl;
Singleton& s2 = Singleton::getHandle();
s2.setValue(9);
cout << s.getValue() << endl;
}
答案 0 :(得分:1)
你做不到。无论上下文如何,私人成员都是私人成员。除了课堂内外,您无法从任何地方访问它们。
您正在做的事情实际上并不是直接访问私有成员 ,您使用公共函数返回对它的引用然后可以使用它。 main
函数中的代码不会访问私有成员m
。
答案 1 :(得分:1)
我没有看到Singleton
以外的任何内容访问私有静态变量s
。
在main中,您引用了一个单例,恰好被命名为s
,但这不是直接访问私有静态变量Singleton::s
。您的方法Singleton::getHandle
会返回对Singleton::s
的引用,该引用恰好绑定到main中的s
,但正如您演示的那样,您可以将其绑定到s
以外的其他内容,比如s2
。
该行
Singleton Singleton::s(47);
正在定义(以及初始化)Singleton::s
,但如果您尝试在main中引用Singleton::s
,则会出现预期的错误。