在全局空间中访问的私有静态对象

private static object accessed in global space

本文关键字:静态 对象 访问 全局 空间      更新时间:2023-10-16

>单例疑问:我如何能够访问全局空间中的私有静态对象?代码如下。这运行得很好。


#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;
}

除了Singleton访问私有静态变量之外,我没有看到任何s.

在main中,你有一个对恰好名为s的单例的引用,但这并不直接访问私有静态变量Singleton::s。您的方法Singleton::getHandle返回对碰巧绑定到 main 中的sSingleton::s的引用,但正如您演示的那样,您可以将其绑定到 s 以外的其他内容,例如 s2

该行

Singleton Singleton::s(47);

正在定义(就像初始化一样)Singleton::s,但是如果您尝试在 main 内部引用Singleton::s,您会按预期收到错误。

你不能。私有成员是私有的,无论上下文如何。除了在类内部之外,您无法从任何地方访问它们。

您正在执行的操作实际上并不是直接访问私有成员,而是使用公共函数返回对它的引用,然后可以使用该引用。main函数中的代码不访问私有成员m