C++之单例类模板

    科技2025-09-15  49

    需求的提出

    在架构设计时,某些类在整个系统生命周期中最多只能有一个对象存在(Single Instance)

    要控制类的对象数目,必须对外隐藏构造函数;

    思路:

    1、将构造函数的访问属性设置为private 2、定义instance并初始化为NULL; 3、当需要使用对象时,访问instance的值 1)、空值:创建对象,并用instance标记; 2)、非空值:返回instance标记的对象。

    实例分析1

    #include <iostream> #include <string> #include <cstdlib> //#include "Array.h" //#include <memory> //#include "SmartPointer.h" using namespace std; class SObject { static SObject* c_instance; //定义instance并初始化为NULL SObject(const SObject&); SObject& operator =(const SObject&); SObject() { } public: static SObject* GetInstance(); void print() { cout << "this = " << this << endl; } }; SObject* SObject::c_instance = NULL; SObject* SObject::GetInstance() { //空值:创建对象,并用instance标记 ,非空值:返回instance标记的对象 if(c_instance == NULL) { c_instance = new SObject(); } return c_instance; } int main() { SObject* s = SObject::GetInstance(); SObject* s1 = SObject::GetInstance(); SObject* s2 = SObject::GetInstance(); s->print(); s1->print(); s2->print(); return 0; }

    实例分析2 单例模板 maim.c

    #include <iostream> #include <string> #include <cstdlib> //#include "Array.h" //#include <memory> //#include "SmartPointer.h" #include "Singleton.h" using namespace std; class SObject { friend Singleton<SObject>; //当前类需要使用单例模式; SObject(const SObject&); SObject& operator =(const SObject&); SObject() { } public: void print() { cout << "this = " << this << endl; } }; int main() { SObject* s = Singleton<SObject>::GetInstance(); SObject* s1 = Singleton<SObject>::GetInstance(); SObject* s2 = Singleton<SObject>::GetInstance(); s->print(); s1->print(); s2->print(); return 0; }

    头文件

    #ifndef SINGLETON_H #define SINGLETON_H template<typename T> class Singleton { static T* c_instance; //定义instance并初始化为NULL public: static T* GetInstance(); }; template<typename T> T* Singleton<T>::c_instance = NULL; template<typename T> T* Singleton<T>::GetInstance() { //空值:创建对象,并用instance标记 ,非空值:返回instance标记的对象 if(c_instance == NULL) { c_instance = new T(); } return c_instance; } #endif

    小结

    1、单例模式是开发中最常用的设计模式之一; 2、单例模式的应用使得一个类最多只有一个对象; 3、可以将单例模式相关的代码抽象成模板; 4、需要使用单例模式的类直接使用单例模板。

    Processed: 0.012, SQL: 8