例如,我有以下课程:
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*?该赋值就像一个函数,但用作赋值.
静态数据成员不是给定类类型的对象的一部分; 它们是独立的对象.因此,静态数据成员的声明不被视为定义.因此,必须在类声明之外定义静态成员.
在你的例子中:
singelton * 是一种成员. singleton:: 是类名(如命名空间)m_pInstance是成员名称PS:由于静态变量在C++中默认初始化为0,因此您无需显式设置m_pInstance为0(或NULL).只有这个定义就足够了:
singelton * singelton::m_pInstance;
Run Code Online (Sandbox Code Playgroud)