Jir*_*Jir 1 c++ singleton private-members
我在代码中实现了Singleton设计模式.
假设它是:
class Singleton
{
Singleton () {}
static Singleton* s;
public:
static Singleton* Get () {
if (!s)
s = new Singleton ();
return s;
}
};
Run Code Online (Sandbox Code Playgroud)
令我困惑的是这种模式的"初始化".在.cpp我把:
SingletonPointer* SingletonClass::s (0);
Run Code Online (Sandbox Code Playgroud)
但我不明白如何才能访问 define s,因为它是如此private.怎么可能?
TIA,吉尔
使用Singleton模式的最佳方法是根本不使用它.
单身人士为何不好的简要总结:
使用Singleton 不能解决任何问题.它只是将错误的语义应用于现有代码,使得该代码的未来扩展变得困难或不可能(如果明天你需要两个?),并添加新的问题.长话短说,就是不要使用它们.
除了声明之外,静态字段必须具有定义.声明通常在.h文件中的类声明中,而定义几乎总是在.cpp文件中.静态变量的定义是必须的,因为它们必须初始化为某些东西.
但即使定义在类体之外,甚至在完全不同的文件中,也并不意味着它不是类的一部分.它SingletonClass::使它成为类定义的一部分(而不是类声明),因此它可以"访问"私有字段.
对于在类体外部定义的方法也是如此,例如:
// A.h
class A
{
private:
int b;
public:
A(int x) : b(x)
{}
Do();
}
// A.cpp
A::Do()
{
return b;
}
Run Code Online (Sandbox Code Playgroud)