读书人

为啥这样在类外调用私有构造函数可以通

发布时间: 2013-12-16 23:49:16 作者: rapoo

为什么这样在类外调用私有构造函数可以通过

#include <iostream>
using namespace std;

class Singleton
{

private:
Singleton(){ m_Test = 10; }
static Singleton *m_Instance;
int m_Test;

public:
static Singleton *GetInstance()
{
return m_Instance;
}

static void DestoryInstance()
{
if (m_Instance != NULL )
{
delete m_Instance;
m_Instance = NULL ;
}
}

int GetTest()
{
return m_Test;
}
};

Singleton* Singleton::m_Instance = new Singleton();//此处调用私有构造函数通过了
Singleton* m_Instance = new Singleton();//而此处则报错

int main(int argc , char *argv [])
{
Singleton *singletonObj = Singleton ::GetInstance();
cout<<singletonObj->GetTest()<<endl;
Singleton ::DestoryInstance();
return 0;
}


构造函数是私有的
在类外new一个对象赋给静态成员变量可以通过,而赋给一般的全局变量就不行,这是为什么?
[解决办法]
Singleton* Singleton::m_Instance = new Singleton(); 这个是类的一部分,类里面的变量当然可以访问私有变量啦。
Singleton* m_Instance = new Singleton(); 这是一个全局变量。

读书人网 >C++

热点推荐