Znn3bq.jpeg
²é¿´: 147  |  »Ø¸´: 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 µÄÖ÷Ìâ¸üÐÂ
×î¾ßÈËÆøÈÈÌûÍÆ¼ö [²é¿´È«²¿] ×÷Õß »Ø/¿´ ×îºó·¢±í
[¿¼ÑÐ] Çóµ÷¼Á +9 СÄô°®Ñ§Ï° 2026-04-16 11/550 2026-04-17 22:34 by chixmc
[¿¼²©] Ç󲩵¼£üÉúÎïÖÊ»ù¶à¿×̼/³¬¼¶µçÈÝ·½Ïò£¬ÒÑÓÐÏà¹Ø³É¹û£¬Ñ°ÄÜÔ´²ÄÁÏ/̼²ÄÁÏ·½ÏòÀÏʦ +3 ÖíÖíÈËZzz 2026-04-12 3/150 2026-04-17 19:10 by ÑôÑôÑô^_^
[¿¼ÑÐ] ½ÓÊÜÈκε÷¼Á +4 Ò²¾ÍÊÇÀõ×Ó 2026-04-17 4/200 2026-04-17 17:57 by Equinoxhua
[½Ìʦ֮¼Ò] ɽ¶«Ë«·ÇԺУ¿¼ºË³¬¼¶ÎÞµ×Ïߣ¬Áìµ¼ÐÒÔÖÀÖ»ö£¬½ÌʦÔâÑê¿Ö +4 qut2026 2026-04-11 8/400 2026-04-17 16:10 by »á·ÉµÄÖí157
[¿¼ÑÐ] 322Çóµ÷¼Á +6 tekuzu 2026-04-17 6/300 2026-04-17 13:48 by Espannnnnol
[¿¼ÑÐ] 335Çóµ÷¼Á +20 ÏëÉϰ¶Ñ½£¡£¡ 2026-04-12 23/1150 2026-04-17 10:50 by cuisz
[¿¼ÑÐ] ¿ÒÇëÓÐѧУÊÕÁô +8 ¿Â»´È» 2026-04-12 8/400 2026-04-17 09:34 by Öí»á·É
[¿¼ÑÐ] 22ר˶Çóµ÷¼Á +10 haoyunÉϰ¶ 2026-04-11 12/600 2026-04-16 22:21 by Öí»á·É
[¿¼ÑÐ] »¯Ñ§070300 Çóµ÷¼Á +28 ¹þ¹þ¹þ^_^ 2026-04-12 28/1400 2026-04-16 21:36 by ´óÁ¦Ë®ÊÖÁ¦´óÎÞÇ
[¿¼ÑÐ] 22408 312Çóµ÷¼Á +23 ÃÅ·ÃþÃþ 2026-04-14 25/1250 2026-04-16 21:21 by Art1977
[¿¼ÑÐ] 294Çóµ÷¼Á +14 µ­È»654321 2026-04-15 14/700 2026-04-16 21:01 by lpl364211
[¿¼ÑÐ] 26ҩѧר˶105500Çóµ÷¼Á +6 à¶¹þ¼ÓÓÍ 2026-04-13 7/350 2026-04-16 14:31 by zhouxiaoyu
[¿¼ÑÐ] 322Çóµ÷¼Á +8 123°²¿µ 2026-04-12 15/750 2026-04-16 11:07 by Espannnnnol
[¿¼ÑÐ] 290µ÷¼ÁÉúÎï0860 +38 ÍÛ¹þ¹þ£¬¡£ 2026-04-11 44/2200 2026-04-16 09:52 by cuisz
[¿¼ÑÐ] 279ѧ˶ʳƷרҵÇóµ÷¼ÁԺУ 20+7 ¹Â¶ÀµÄÀǰ®³ÔÑò 2026-04-12 29/1450 2026-04-16 09:00 by screening
[¿¼ÑÐ] 297£¬¹¤¿Æµ÷¼Á? +10 ºÓÄÏũҵ´óѧ-ÄÜ 2026-04-14 10/500 2026-04-15 21:50 by noqvsozv
[¿¼ÑÐ] 085600²ÄÁÏÓ뻯¹¤329·ÖÇóµ÷¼Á +24 Ò¶zilin 2026-04-13 25/1250 2026-04-14 09:20 by ÊÔ¹ÜÆÆÁÑ
[¿¼ÑÐ] 339Çóµ÷¼Á +4 hanwudada 2026-04-12 4/200 2026-04-13 12:03 by À¶ÔÆË¼Óê
[¿¼ÑÐ] 331Çóµ÷¼Á +5 Íõ¹ú˧ 2026-04-11 5/250 2026-04-11 22:56 by Ϫ½§Á÷Ë®
[¿¼ÑÐ] 359Çóµ÷¼Á +5 θ¾·ÂÎÀÛÁË 2026-04-11 5/250 2026-04-11 19:55 by lbsjt
ÐÅÏ¢Ìáʾ
ÇëÌî´¦ÀíÒâ¼û