单例模式:一个类有且只有一个实例。
目的:保证类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。
应用:GUI应用必须是单鼠标,操作系统只能有一个窗口管理器,一台PC连接一个键盘,MODEM连接有且只需要一条电话线。
应用背景:一般用于比较复杂的对象,只初始化一次。
优点:在程序运行时,不会一执行这个类就初始化一次,有效防止数据冲突,节省内存空间,不浪费系统资源。
例:
在类student中
static student* instance;
student(){
//初始化函数可以为空
}
student *student::GetInstance(){
if(instance==null){
instance =new student();
}
return instance;
}
int student::getA(int xa){//类的成员函数
xa++;
return xa;
}
student::getinstance()->getA(xa);//调用类的成员函数
使用new直接初始化VS使用GetInstance()初始化的区别:
- GetInstance()可以直接使用,调用多次返回同一个对象;
- new可以在大部分类里使用(生产一个实例对象,或在栈上声明一个对象),每部分调用都是新的对象,GetInstance()只在少部分类中使用;
- 对象使用之前通过getInstance()得到,不需要自己定义,使用后不需要delete;
- new创建后只能当次使用,GetInstance()可以跨栈区域、远程跨区域使用;
- new一定生成一个新对象,分配内存,Get Instance()不一定再次创建,可以使用已经存在的引用。