请解释一个功能单例(C++)

Iva*_*van 1 c++ singleton

例如,我有以下课程:

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;
}
Run Code Online (Sandbox Code Playgroud)

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

fas*_*ked 5

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

在你的例子中:

  • singelton * 是一种成员.
  • singleton:: 是类名(如命名空间)
  • 并且m_pInstance是成员名称

PS:由于静态变量在C++中默认初始化为0,因此您无需显式设置m_pInstance0(或NULL).只有这个定义就足够了:

singelton * singelton::m_pInstance;
Run Code Online (Sandbox Code Playgroud)