Znn3bq.jpeg
ÉÇÍ·´óѧº£Ñó¿ÆÑ§½ÓÊܵ÷¼Á
²é¿´: 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 ["<"<         _insatnce = 0;
    }

    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 ["<"<         _insatnce = 0;
    }

    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 ]
»Ø¸´´ËÂ¥

» ²ÂÄãϲ»¶

×öÈËÒªºñµÀ°¡£¡ºñµÀ°¡£¡
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû

zsglly

ľ³æ (ÖøÃûдÊÖ)

ËÍÉÏ2005Äê¶Ô¸÷³æ³æµÄ×îºó×£¸££¬HAPPY NEW YEAR!
×öÈËÒªºñµÀ°¡£¡ºñµÀ°¡£¡
2Â¥2005-12-31 22:29:50
ÒÑÔÄ   »Ø¸´´ËÂ¥   ¹Ø×¢TA ¸øTA·¢ÏûÏ¢ ËÍTAºì»¨ TAµÄ»ØÌû
Ïà¹Ø°æ¿éÌø×ª ÎÒÒª¶©ÔÄÂ¥Ö÷ zsglly µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] Çóµ÷¼Á +7 СÄô°®Ñ§Ï° 2026-04-11 10/500 2026-04-14 01:37 by wulijun2012
[¿¼ÑÐ] 310Çóµ÷¼Á +15 666ÕæºÃ 2026-04-11 17/850 2026-04-13 22:27 by pies112
[¿¼ÑÐ] ÉúÎïѧ308·ÖÇóµ÷¼Á£¨Ò»Ö¾Ô¸»ª¶«Ê¦´ó£©½ÓÊÜ¿çרҵ +8 ÏàÐűػá¹ââÍòÕ 2026-04-13 8/400 2026-04-13 20:26 by biomen
[¿¼ÑÐ] һ־Ը˫·Ç085400µç×ÓÐÅÏ¢344 Çóµ÷¼Á£¬¶Ô²ÄÁϺͻ¯Ñ§·½ÏòÒ²¸ÐÐËȤ +12 ÎÞÇéµÄСÑò 2026-04-09 13/650 2026-04-13 14:17 by ÕÅzhihao
[¿¼ÑÐ] һ־Ը³¶«´óѧ071000ÉúÎïѧѧ˶³õÊÔ·ÖÊý276Çóµ÷¼Á +8 Ľ¾øcc 2026-04-09 8/400 2026-04-13 14:08 by ÕÅzhihao
[¿¼ÑÐ] Çóµ÷¼Á +9 ³Ô¿Ú±ù¼¤Áè 2026-04-07 9/450 2026-04-13 08:46 by ×ÏêØ×ÏÆå
[¿¼ÑÐ] 344 ²ÄÁÏרҵ Çóµ÷¼Á211 ÎÞµØÓòÒªÇó +8 hualkop 2026-04-11 8/400 2026-04-12 22:24 by fqwang
[¿¼ÑÐ] 22408 352·ÖÇóµ÷¼Á +5 ŬÁ¦µÄÏÄÄ© 2026-04-09 5/250 2026-04-12 19:17 by wj165256
[¿¼ÑÐ] 086000µ÷¼Á +6 Ê®Æßsa 2026-04-07 6/300 2026-04-12 11:05 by ´óÁ¦Ë®ÊÖÁ¦´óÎÞÇ
[¿¼ÑÐ] 280Çóµ÷¼Á +7 ÙâÙâÒ¹Ò¹ 2026-04-09 10/500 2026-04-12 00:33 by À¶ÔÆË¼Óê
[¿¼ÑÐ] 280Çóµ÷¼Á +13 wzzzÍõ 2026-04-09 13/650 2026-04-12 00:31 by ÓÂÅʸ߷å0126
[¿¼ÑÐ] 343Çóµ÷¼Á +9 Íõ¹ú˧ 2026-04-10 9/450 2026-04-11 20:31 by dongdian1
[¿¼ÑÐ] Çóµ÷¼Á +11 ôæôæÒ»ÊéÉú 2026-04-09 11/550 2026-04-11 19:57 by ÄæË®³Ë·ç
[¿¼ÑÐ] µ÷¼ÁÇóÖú +6 ¹ûÈ»ÓÐÎÒ 2026-04-11 7/350 2026-04-11 16:22 by Ã÷Ô´ËʱÓÐ
[¿¼ÑÐ] 085410-273Çóµ÷¼Á +6 X1999 2026-04-10 6/300 2026-04-11 10:32 by Delta2012
[¿¼ÑÐ] 288Çóµ÷¼Á +15 ´úfish 2026-04-09 16/800 2026-04-11 10:26 by wwj2530616
[¿¼ÑÐ] ¹¤¿Æ273µ÷¼Á +6 X1999 2026-04-09 7/350 2026-04-11 10:23 by zhq0425
[¿¼ÑÐ] Ò»Ö¾Ô¸985»úеѧ˶380Çóµ÷¼Á +5 ¹Ø¹ØöÂð¯10 2026-04-11 5/250 2026-04-11 10:10 by ÖªÄî¡£A
[¿¼ÑÐ] 293µ÷¼Á +25 yj1221 2026-04-08 26/1300 2026-04-10 15:02 by ²ñС°×
[¿¼ÑÐ] ²ÄÁÏר˶³õÊÔ·Ö332Ò»Ö¾Ô¸Î÷±±¹¤Òµ´óѧ£¬ +12 ¹ÊÈË?? 2026-04-09 12/600 2026-04-09 18:34 by Ccclqqq
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û