C++ 怎么可以这样子写?
本帖最后由 vipygd 于 2013-11-20 20:35:37 编辑
/*
#include <iostream>
using namespace std;
class Singleton
{
public:
static Singleton *GetInstance()
{
return const_cast<Singleton *>(m_Instance);
}
void Show()
{
cout<<m_Test<<endl;
}
private:
Singleton(){ m_Test = 10; }
static const Singleton *m_Instance;
int m_Test;
};
const Singleton *Singleton::m_Instance = new Singleton();
可以看到,在Singleton中,构造函数是private的,怎么还可以在外部进行new Singlton操作?求解释。
[解决办法]
const Singleton *Singleton::m_Instance = new Singleton();
这个你竟然认为是在类的外面?
Singleton:: 这么大的东西你能没看见?
[解决办法]
你的误解在于,以为{}之外就是类外。
[解决办法]
lz,你需要搞清楚类中定义静态变量,那你要在什么地方进行初始化呢?? 类的静态变量是需要在类的外部进行初始化的哦!!!
是的,这个我知道的,我是在外部进行初始化的。现在我是使用new Singleton()进行初始化的,但是Singleton的构造函数是private的,既然是private的,为什么在外部能进行new操作呢?
你的误解在于,以为{}之外就是类外。
那是?能说明白点吗?
五楼已经解释了。
[解决办法]
静态成员的初始化表达式,要是有 ClassName:: 的限定,那么就是Class作用域。你认为下面的g()调用的是哪个?
int g() { printf("::g()\n"); return 0; }
class Foo {
static int n;
static int g() { printf("Foo::g()\n"); return 1; }
};
int Foo::n = g();