| ²é¿´: 145 | »Ø¸´: 1 | |||
| µ±Ç°Ö÷ÌâÒѾ´æµµ¡£ | |||
zsgllyľ³æ (ÖøÃûдÊÖ)
|
[½»Á÷]
C++ʵÏÖµ¥¼þµÄ³õ̽
|
||
|
ÔÚ¡¶Éè¼ÆÄ£Ê½¡·ÖÐÓÐÒ»¸ö½Ð×öµ¥¼þ(Sigleton)µÄģʽ,ÊÇÓÃÀ´¿ØÖÆ´´½¨Î¨Ò»¶ÔÏó¡£ÊéÖÐÖ»½²µ½ÁËÈçºÎ½¨Á¢Singleton¶ÔÏó £¬¶ÔÓÚÈçºÎÀ´Ïú»Ù´Ë¶ÔÏóÔòÖ»×Ö²»Ìá¡£µ«ÊǶÔÏóÉúÃüµÄ¹ÜÀí¶ÔÓÚC++³ÌÐòÔ±À´ËµÊǶàôµÄÖØÒªÑ½¡£»òÐíSingletonÖ» ÊÇÊôÓÚ´´½¨Ä£Ê½µÄÒ»ÖÖ£¬´óʦÃÇÈÏΪÔÚÕâÀï²»Ó¦Éæ¼°µ½¡°Ïú»Ùģʽ¡±¡£ ÓÐÈËÈÏΪSinletonÊÇÓ¦¸ÃÔÚ³ÌÐòµÄÍ˳öµÄʱºòÏú»ÙµÄ¡£µ«ÊÇÍ˳öÓ¦¸ÃÊÇÔÚʲôʱºòÄØ¡£ Çë¿´ÈçÏ´úÂë: ¼ÙÉèÊǰ´Éè¼ÆÄ£Ê½ÀïµÄ·½Ê½À´Ð´Ò»¸ö¶ÔÏóSinglton¶ÔÏó¡£ class Singlton { private: static Singlton * _insatnce; Singlton() { cout<<"object is ["< public: ~Singlton() { cout<<"object is ["< } static Singlton * GetSinglton() { if(_insatnce) return _insatnce; _insatnce = new Singlton; return _insatnce; } void Dosomething() { cout<<"object is ["< }; Singlton * Singlton::_insatnce = NULL; void foo(int i) { /* ³ÌÐòÌå */ if(i) Singlton::GetSinglton()->Dosomething(); /* ³ÌÐòÌå */ } int main() { /* void ; ³ÌÐòÌå */ foo(1) // if(Singlton::_insatnce) // Singlton::GetSinglton(); ²»ÄܱàÒë delete Singlton::GetSinglton(); } ÊÂʵÉÏÈç¹ûÔÚSingltonij´ÎÔËÐиù±¾¾ÍûÓе÷Óùýfoo(1)¶øÖ»Êǵ÷ÓÃÁËfoo(0),µ«ÊÇ»¹±Ø ÐëµÃÔÚ×îºó³ÌÐòÍ˳öʱµ÷ÓÃʵ¼ÊÉÏÕâʱºòµ÷ÓÃGetSinglton()À´½¨Á¢¶ÔÏóÂíÉϾͱ»É¾³ýÁË ¡£ÕâÊÇÍêȫûÓбØÒªÒ²ÊÇÀ˷ѵġ£ÏëÔÚ³ÌÐòÖ´ÐÐʱʹÓÃÅжÏÓï¾äÒ²ÊÇÐв»Í¨µÄ¡£ÕâÑùµÄʵ ÏÖ»¹ÊÇ¿ÉÒԸĽøµÄ,ʹÓÃÔÚSingltonÖÐÔÙÔö¼ÓÒ»¸ö¾²Ì¬µÄ³ÉÔ±º¯ÊýCheckExistInstanceÀ´ÅÐ ¶Ï¶ÔÏóÊÇ·ñ´æÔÚ,¿ÉÒÔÌá¸ßЧÂÊ¡£µ«ÕâÑùÓÖ¸ø¶ÔÏóÔö¼ÓÁ˽ӿڣ¬Ôö¼ÓÁË´úÂëά»¤µÄ¿ªÏú¡£ µ«ÊǶÔÏóÔÚ³ÌÐò½áÊøÊ±Äã²¢²»Çå³þÊDz»ÊÇÕæµÄ²»ÔÙÐèÒª´Ë¶ÔÏóÁË¡£ÎÒÃÇÔÙÐ޸ĴúÂëÈçÏ¡£ class Singlton { private: static Singlton * _insatnce; Singlton() { cout<<"object is ["< public: ~Singlton() { cout<<"object is ["< } static Singlton * GetSinglton() { if(_insatnce) return _insatnce; _insatnce = new Singlton; return _insatnce; } void Dosomething() { cout<<"object is ["< }; Singlton * Singlton::_insatnce = NULL; void foo(int i) { /* ³ÌÐòÌå */ if(i) Singlton::GetSinglton()->Dosomething(); /* ³ÌÐòÌå */ } class TestSingleton { public: TestSingleton() { Singlton::GetSinglton()->Dosomething(); } ~TestSingleton() { Singlton::GetSinglton()->Dosomething();//´Ë´¦³öÏÖÄÚ´æÐ¹Â¶ } }; TestSingleton _test; int main() { /* void ; ³ÌÐòÌå */ foo(1); delete Singlton::GetSinglton(); } ÇÒ¿´~TestSingleton()ÉêÇë³öÀ´µÄ¶ÔÏóÓ¦¸ÃÓÉËÀ´ÊÍ·ÅÄØ¡£ÓÉ´ËÒý·¢ÁËÓÐÈËÖ÷ÕÅʹÓà ÒýÓüÇÊýÆ÷ÓÉÄ£·ÂCOMµÄReleaseÀ´ÊµÏÖ.ʵÏÖ´úÂëÈçÏ class Singleton { private: static int m_Ref; static Singleton * _instance; public: void DoSomething() { cout<<"object is ["< static Singleton * GetSinglton() { if(_instance) { ++m_Ref; return _instance; } _instance = new Singleton; ++m_Ref; return _instance; } ULONG Release() { --m_Ref; if(0 == m_Ref) { delete _instance; _instance = NULL; return 0; } return m_Ref; } private: Singleton() { cout<<"object is ["< ~Singleton() { cout<<"object is ["< }; Singleton *Singleton::_instance = NULL; int Singleton::m_Ref = 0; void foo() { Singleton * p = Singleton::GetSinglton(); p->DoSomething(); p->Release(); } int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { Singleton * p = Singleton::GetSinglton(); p->DoSomething(); p->Release(); foo(); return 0; } ÕâÑùµÄ·½Ê½ÊDz»´æÔÚÄÚ´æÐ¹Â¶µÄ£¬²¢ÇÒÕâ¶Î´úÂë±íÃæÉÏÊǸöµ¥¼þ£»Êµ¼ÊÉÏ, Singleton¶ÔÏóÊDZ»¶à´Î½¨Á¢ºÍÏú»ÙµÄ£¬Èç¹ûÕâ¸ö¶ÔÏó²»ÏñÒÔÉÏ´úÂëдµÃÄÇô¼òµ¥, ÊÇÈç¹ûÔÚµ¥¼þÖÐÉêÇëÁ˲»Ð¡µÄÄڴ棬ÄÇôÒÔÉϵĴúÂëÊǶàôµÄ²»¿ÉÏëÏóѽ£¡¸üÓÐÈç ¹ûµ¥¼þÀï¼Ç¼ÁËÏñʹÓôÎÊýÄÇÑùµÄ״̬±äÁ¿£¬ÄÇÇé¿ö¾Í¸üÔã¸âÁË¡£ ÊÂʵÉϵ¥¼þµÄʵÏÖ²¢²»±ÈÏëÏñÖеÄÄÇÑùÄÑ¡£ÎÒÃÇÇÒ¿´ class Singlton { private: Singlton() { cout<<"object is ["< public: ~Singlton() { cout<<"object is ["< static Singlton & GetSinglton() { static Singlton s; return s; } void Dosomething() { cout<<"object is ["< }; void foo(int i) { /* ³ÌÐòÌå */ if(i) Singlton::GetSinglton().Dosomething(); /* ³ÌÐòÌå */ } class TestSinglton { public: TestSinglton() { Singlton::GetSinglton().Dosomething(); } ~TestSinglton() { Singlton::GetSinglton().Dosomething(); } }; TestSinglton test1; int main() { /* void ; ³ÌÐòÌå */ TestSinglton test2; foo(1); return 0; } ÕâÀïÓõ½µÄÒ»¸ö¼¼ÇɾÍÊÇʹÓÃÁ˾²Ì¬µÄ±äÁ¿,ºÜÃ÷ÏÔÓÐÈçϵĺô¦£º 1)Èç¹ûÔÚ´Ë´ÎÔËÐÐʱ¸ù±¾Ã»ÓÐÓõ½µ¥¼þ£¬¶ÔÏñÊDz»»á±»½¨Á¢µÄ¡£ 2)ÐèÒªÓû§À´¹ØÐĶÔÏóµÄÊÍ·Å 3)ÍêÈ«·ûºÏÉè¼ÆÒªÇó [ Last edited by »ÃÓ°ÎÞºÛ on 2006-11-27 at 08:16 ] |
» ²ÂÄãϲ»¶
ÇóÖúµ÷¼Á£¬¿çµ÷
ÒѾÓÐ16È˻ظ´
»¯¹¤Ñ§Ë¶294·Ö£¬Çóµ¼Ê¦ÊÕÁô
ÒѾÓÐ30È˻ظ´
Çóµ÷¼Á
ÒѾÓÐ10È˻ظ´
¿¼ÑÐÇóµ÷¼Á
ÒѾÓÐ13È˻ظ´
Çóµ÷¼Á
ÒѾÓÐ3È˻ظ´
È˹¤ÖÇÄÜ320µ÷¼Á08¹¤À໹Óлú»áÂð
ÒѾÓÐ17È˻ظ´
¿¼ÑÐÓ¢Ò»ÊýÒ»338·Ö
ÒѾÓÐ10È˻ظ´
085600²ÄÁÏÓ뻯¹¤329·ÖÇóµ÷¼Á
ÒѾÓÐ20È˻ظ´
085600²ÄÁÏÓ뻯¹¤349·ÖÇóµ÷¼Á
ÒѾÓÐ15È˻ظ´
Çóµ÷¼Á
ÒѾÓÐ13È˻ظ´

zsglly
ľ³æ (ÖøÃûдÊÖ)
- Ó¦Öú: 0 (Ó×¶ùÔ°)
- ¹ó±ö: 0.15
- ½ð±Ò: 2268.7
- Ìû×Ó: 1036
- ÔÚÏß: 4.4Сʱ
- ³æºÅ: 83160
- ×¢²á: 2005-07-28
- ÐÔ±ð: GG
- רҵ: ´«ÈÈ´«ÖÊѧ

2Â¥2005-12-31 22:29:50














»Ø¸´´ËÂ¥