代码 1:
#include<iostream>
class Singleton
{
private:
static Singleton instance; //declaration of static variable
public:
static Singleton &GetInstance()
{
return instance;
}
void Hello()
{
std::cout << "Hello!";
}
};
Singleton Singleton::instance; //definition of static variable
int main()
{
Singleton::GetInstance().Hello();
}
代码 2:
#include <iostream>
class Singleton
{
public:
static Singleton &GetInstance()
{
static Singleton instance; //declaration of static variable
return instance;
}
void Hello()
{
std::cout << "Hello!";
}
};
int main()
{
Singleton::GetInstance().Hello();
}
在代码 1 中,我们需要定义静态变量,但在代码 2 中,我们只是在函数 Singleton::GetInstance&() 中声明了静态变量,然后返回它。代码 2 中的声明和定义是否在同一行?为什么?
该静态成员变量 instance
声明内部class Singleton
在代码1是一个类变量。
这意味着无论 的不同实例的状态如何,对于class Singleton
该特定类的所有对象/实例,静态变量的状态都将保持不变。因此,它需要在类之外定义。(就像一个全局变量,可用于所有范围的功能。)。即使您不创建任何实例,也会在内存中分配静态成员变量的单个副本。它们的定义贯穿整个文件。
在代码 2 中,静态变量instance
不是类变量,而只是静态成员函数内的局部变量。因此不需要在外部定义它,因为它的范围仅限于static Singleton &GetInstance()
功能。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句