说明:保证一个类仅有一个实例,并提供一个访问它的全局访问点。(整个系统只需要拥有一个全局对象时,例如日志,数据库连接)
作用:主要解决一个全局使用的类频繁地创建与销毁。
注意:在使用单例模式时,构造函数是私有的。
优点:
1、在内存里只有一个实例,减少了内存的开销,尤其时频繁的创建和销毁实例。
2、避免对资源的多重占用(写文件操作)‘
static Log GetInstance()
{if(my_logger_ == null){my_logger_ = new Log();}return my_logger_;
}
2)线程安全写法:双检锁
1、申请Log的内存
2、变量指针指向该内存
3、在申请的内存上构造Log
static Log GetInstance()
{if(my_logger_ == null){QMutexLocker locker(&mutex);if(!my_logger_){Log *my_logger = new Log();my_logger_ =my_logger; //避免出现野指针(申请完内存,编译器先指向内存,刚要构造时,被一个线程获取,就出现野指针,运行会出现段错误)}}return my_logger_;
}
Log& Log::Instance()
{static Log log;return log;
}
synchronized关键字:
synchronized(获取锁的地方){
工作内容
}