首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-12-16 
为什么这样在类外调用私有构造函数可以通过#include iostreamusing namespace stdclass Singleton{priv

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

#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(); 这是一个全局变量。

热点排行