一. 懒汉模式-线程不安全
class CSingleton{ private: static CSingleton* pInstance; CSingleton()//构造函数私有化,封死外界使用new创建实例的可能 { } public: static CSingleton* getInstance()//实例化本类的唯一全局入口 { if(NULL == pInstance) { pInstance = new CSingleton(); } return pInstance; }};
问题:单例模式中构造函数为什么必须是私有的?
私有构造器,可以减少错误的使用和猜测而定的规则。构造函数用于实例时,自动调用为成员变量分配空间。在实际开发过程中,由于调用了一个单例模式,该单例的构造方法是public的。在调用时候,采用了Singleton singleton = new Singleton();调用,这样的结果就是导致不断的初始化Singleton类,内存很快会耗尽,应用速度变慢。?所以,单例模式的构造方法最好定义private,并且通过Singleton.getInstance()调用。问题: 为什么单例模式的实例要设置为静态的?
从语义上讲,类的静态成员变量是所有对象共享的,而单例模式就是为了让该类所有实例共享同一个对象。从语法上讲,常见的单例模式都是通过一个静态方法返回其单例,而静态方法的内部不能直接使用非静态变量。 问题:为什么getInstance要设置成静态函数?静态方法可以在实例化之前,就通过类名调用,此函数用于构造单利,会早于单利生成调用。也就是说它的返回值是当这个函数首次被访问时被创建的。(懒汉)