例如,我有一个以下类(class):

class singelton
{
public:
    static singelton* Instance()
    {
        if (m_pInstance == 0)
        {
            m_pInstance = new singelton();
        }
        return m_pInstance;
    }

    void setData(std::string input) { data = input; }
    void getData() const { std::cout << data << std::endl; }
private:
    singelton() {}
    ~singelton() {}

    static singelton* m_pInstance;

    std::string data;
};

typedef singelton s;

//what is this? Why need a singleton name? I mean "singelton*".
singelton* singelton::m_pInstance = 0;

int main(int argc, char** argv)
{
    s.Instance()->setData("Something...");
    s.Instance()->getData();
    return 0;
}

什么是singelton* singelton::m_pInstance = 0;
该函数为单例实例分配零/空值,但是为什么需要使用singleton*呢?该分配就像一个函数,但用作分配。

最佳答案

静态数据成员不是给定类类型的对象的一部分;它们是独立的对象。结果,静态数据成员的声明不被视为定义。因此,必须在类声明之外定义静态成员。

在您的示例中:

  • singelton *是一种成员。
  • singleton::是类名(如 namespace )
  • m_pInstance是成员名称

  • P.S .: 由于在C++中静态变量默认情况下初始化为0,因此不需要将m_pInstance显式设置为0(或NULL)。仅定义就足够了:
    singelton * singelton::m_pInstance;
    

    10-05 23:49