C++ 在全局空间中访问的私有静态对象
单例怀疑:我如何能够访问全局空间中的私有静态对象?代码如下所示。这个运行得很好C++ 在全局空间中访问的私有静态对象,c++,static,singleton,C++,Static,Singleton,单例怀疑:我如何能够访问全局空间中的私有静态对象?代码如下所示。这个运行得很好 #包括 使用名称空间std; 单件阶级{ 静态单态; 静态void func() { cout您不能。私有成员是私有的,无论上下文如何。您只能从类内的任何位置访问它们 您所做的不是直接访问私有成员,而是使用一个公共函数返回对它的引用,然后可以使用该引用。main函数中的代码不访问私有成员m除了访问私有静态变量之外,我没有看到任何东西s 在main中,您有一个对一个名为s的Singleton的引用,但这不是直接访问私
#包括
使用名称空间std;
单件阶级{
静态单态;
静态void func()
{
cout您不能。私有成员是私有的,无论上下文如何。您只能从类内的任何位置访问它们
您所做的不是直接访问私有成员,而是使用一个公共函数返回对它的引用,然后可以使用该引用。main
函数中的代码不访问私有成员m
除了访问私有静态变量之外,我没有看到任何东西<代码>s
在main中,您有一个对一个名为s
的Singleton的引用,但这不是直接访问私有静态变量Singleton::s
。您的方法Singleton::getHandle
返回一个对Singleton::s
的引用,该引用恰好绑定到main中的s
但正如您所演示的,您可以将其绑定到s
以外的其他对象,如s2
线路
Singleton Singleton::s(47);
正在定义(以及初始化)
Singleton::s
,但如果您试图在main中引用Singleton::s
,您会得到预期的错误。因此,这意味着我可以在全局空间中初始化静态私有对象???@govindparihar,实际上您并不是在全局空间中“[初始化]静态私有对象”.TheSingleton Singleton::s(47);
行定义变量Singleton::s
。也就是说,它表示Singleton::s
存储在何处并初始化它。当有多个编译单元需要链接在一起时,这一点变得很重要。其中只有一个可以定义Singleton::s
。您可能还需要阅读。
Singleton Singleton::s(47);