设计模式——单例模式
懒汉模式
class Singleton_lazy { public: static Singleton_lazy* get() { if (sl == nullptr) { sl= new Singleton_lazy; } return sl; } class Garbo { ~Garbo() { if(sl) delete sl; } }; private: Singleton_lazy(){} static Singleton_lazy* sl; static Garbo garbo; }; Singleton_lazy* Singleton_lazy::sl = nullptr;
饿汉模式
class Singleton_hungry { public: static Singleton_hungry* get() { return sh; } class Garbo { ~Garbo() { if(sh) delete sh; } }; private: Singleton_hungry() {} static Singleton_hungry* sh; static Garbo garbo; }; Singleton_hungry* Singleton_hungry::sh = new Singleton_hungry;
���:
()1.把构造函数私有,是避免类外进行创建该对象。
2.把成员私有,避免类外直接对该静态成员进行赋值或者其他操作。
()3.把成员写成静态是因为静态成员每个类只存在一份,保证了单例。
4.饿汉模式直接创建对象,该行为发生在main函数创建之前。
5.饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变,懒汉式不一定。
6.Garbo是垃圾回收类,当garbo对象出了作用域调用析构函数释放时,会顺带释放单例对象的资源。当然这个操作不是必要的,毕竟所占内存也特别小。
The End