为什么静态数据成员能够调用私有和保护构造函数呢?


#1
template<typename _TYPE_>
class CSingletonImpl
{
public:
    static _TYPE_* GetInstance(void)
    {
        if (NULL == m_instance)
        {
            m_instance = new _TYPE_;
        }
        return m_instance;
    }
    static void Release()
    {
        if (NULL != m_instance)
        {
            delete m_instance;
            m_instance = NULL;
        }
    }
protected:
    CSingletonImpl(){}
    virtual ~CSingletonImpl()
    {
        assert(m_instance);
        m_instance = NULL; 
    }
private:
    static _TYPE_* m_instance;
};
template<typename _TYPE_>
_TYPE_* CSingletonImpl<_TYPE_>::m_instance;

class SingletonBase
{
public:
    static CSingletonImpl<int> test;//调用CSingletonImpl保护构造函数,
    //为什么能够编译通过,而如果这个代码移到main函数中就失败。
};

#2

@omegacoleman @xosdy @Jackarain @microcai @mic 坐等解答~


#3

#首先吐槽下

#额, 单例是渣啊, 为啥老有人要去添 java 的菊花.

=======

接着回答, static 成员他还是成员啊, 既然是成员, 自然有 private 的访问权限.