例如,我有一个以下类(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;