在全局空间中访问的私有静态对象
private static object accessed in global space
>单例疑问:我如何能够访问全局空间中的私有静态对象?代码如下。这运行得很好。
#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 中的s
的Singleton::s
的引用,但正如您演示的那样,您可以将其绑定到 s
以外的其他内容,例如 s2
。
该行
Singleton Singleton::s(47);
正在定义(就像初始化一样)Singleton::s
,但是如果您尝试在 main 内部引用Singleton::s
,您会按预期收到错误。
你不能。私有成员是私有的,无论上下文如何。除了在类内部之外,您无法从任何地方访问它们。
您正在执行的操作实际上并不是直接访问私有成员,而是使用公共函数返回对它的引用,然后可以使用该引用。main
函数中的代码不访问私有成员m
。
相关文章:
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 我可以读取静态对象中的文件.txt吗?C++
- 通过 Gazebo 世界插件将静态对象附加到机器人链接
- 将对象创建为全局/静态对象会崩溃,而本地对象不会崩溃
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- 将 C# 对象(包含静态对象成员)作为参数传递给 C++/CLI 程序
- 完全释放静态对象内存
- 静态对象指针
- C++文件中.cpp静态对象声明
- C++类中定义静态对象
- 在初始化类的静态对象之前,是否保证初始化该类的静态成员?
- 静态对象如何调用私有构造函数
- cpp 静态对象实例化
- 等效于 Java 静态对象类C++
- 我怎么知道C++编译器是否制作线程安全的静态对象代码
- 在dlclose()之前破坏的静态对象
- 有没有办法为静态对象成员定义一个符合开关标准的常量?
- c++ 防止类共享静态对象
- 什么时候构造函数为静态对象
- 为什么本地静态对象的初始化使用隐藏的防护标志?