单例模式:一个类只能创建一个对象,该模式可以保证该系统中该类只有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。
饿汉模式
特点:程序运行之前对象已创建。
声明一个静态成员变量,它的类型为当前类本身,在类外初始化,调用构造函数初始化。构造函数私有,拷贝构造私有,只声明不实现,或者声明为delete函数(c++11),提供一个公有的静态方法,返回值为指针或者引用。
优点:简单,如果这个单例对象在多线程高并发环境下频繁使用,性能要求较高,那么显然使用饿汉模式来避免资源竞争,提高响应速度更好。
缺点:可能会导致进程启动慢,且如果有多个单例类对象实例启动顺序不确定。没有办法控制多个单例之间的初始化顺序。
class Singleton
{
public:
static Singleton* getinstance()
{
return &m_instance;
}
private:
Singleton()
{}
Singleton(const Singleton&);
Singleton& operator=(const Singleton &);
static Singleton m_instance;
};
Singleton Singleton::m_instance;//在程序入口之前就完成单例对象的初始化
int main()
{
Singleton *p1 = Singleton::getinstance();
Singleton *p2= Singleton::getinstance