|
Примеры использования Паттерн Singleton (Одиночка)Листинг 8 class base { protected: virtual ~base(){} //гарантируем удаление только через FreeInst() public: virtual void Do1()=0; virtual void FreeInst(){delete this;} }; class Simple: public base { protected: ~Simple () {printf("Simple::~Simple\n");} public: void Do1(){printf("Simple::Do1\n");} }; class Singleton: public base { static Singleton* _self; static int _refcount; protected: Singleton(){} ~Singleton () {printf("Singleton::~Singleton\n");} public: static Singleton* Instance() { if(!_self) _self = new Singleton (); _refcount++; return _self; } void FreeInst() {_refcount--; if(!_refcount) {delete this; _self=NULL;}} void Do1(){printf("Singleton::Do1\n");} }; Singleton* Singleton::_self=NULL; int Singleton:: _refcount=0; class Client { base *objs[2]; int ind; public: Client(){ objs[0]=NULL;objs[1]=NULL;ind=0; } ~Client() { for(int i=0;i<ind;i++) objs[i]->FreeInst(); } void Add(base *p){if(ind<2) objs[ind++]=p;} void Do() { for(int i=0;i<ind;i++) objs[i]->Do1(); ...» | Код для вставки книги в блог HTML
phpBB
текст
|
|