昨天再看设计模式,第一个就看到了单例,于是就涉及到了静态变量,那我就以我的理解简单总结一下吧。
先说单例:
顾名思义就是单个实例,在一个程序中只存在一个类的实例即为单例。
先看一个例子吧
class SingelInstance
{
private:
SingelInstance(){}
~SingelInstance(){}
public:
static SingelInstance& GetInstance()
{
static SingelInstance instance;
return instance;
}
};
当然单例的编写还有很多方式,有网上说的懒汉式啊什么的。我不想用new是因为new完了之后还需要delete,于是直接写一个static好了,程序结束自动释放。免得忘记了。
特点:1,构造函数私有化(保证类的实例不可以在类外定义,限定了类的实例)
2,类里面需要一个方法来获取类的实例。
3,需要在2的方法中构造一个实例。
解释:为什么实例要定义为static的,然后取实例的方法要写成static的。
1,如果我把实例不是static的,那么他就是一个局部变量,局部变量一旦离开作用域,那么就会销毁。所以根本不能用。
2,向我的第一个例子,为什么把静态实例定义在函数里,而不是类里,如果是类里面,那么编译的时候会有link错误,为什么呢,因为类的静态变量需要初始化,而且还是类外,因为构造函数是私有的,那么初始化肯定会有问题。所以就把实例写在函数里,函数定位static的。
静态变量
静态变量的好处
1,扩大作用域
2,扩大声明周期
于是再说一说静态变量和全局变量的区别
静态全局变量和全局变量。全局变量就作用域和声明周期来讲都是最大的。加上static呢,有一个词叫做物极必反,于是给全局变量加上static之后,只能牺牲他的作用域了,静态全局变量的作用域就仅限于声明的那个cpp了。
静态局部变量也一样,他的作用域仍然还是所在大括号内,但是声明周期却很长。可以持续到程序结束。
讲明白了吧。其实就是如果你有缺点,那么static会增加一个有点。如果你太完美了,那么static会给你添个缺点。
有缺点才完美嘛。嘎嘎!!!