锘??xml version="1.0" encoding="utf-8" standalone="yes"?>久久久亚洲欧洲日产国码是AV,久久无码AV一区二区三区,久久亚洲精品中文字幕三区http://www.shnenglu.com/beatles/category/20199.htmlzh-cnFri, 09 Nov 2012 07:10:42 GMTFri, 09 Nov 2012 07:10:42 GMT60C++瀹岀編瀹炵幇Singleton妯″紡http://www.shnenglu.com/beatles/archive/2012/11/09/194974.htmlBeatlesBeatlesFri, 09 Nov 2012 06:10:00 GMThttp://www.shnenglu.com/beatles/archive/2012/11/09/194974.htmlhttp://www.shnenglu.com/beatles/comments/194974.htmlhttp://www.shnenglu.com/beatles/archive/2012/11/09/194974.html#Feedback1http://www.shnenglu.com/beatles/comments/commentRss/194974.htmlhttp://www.shnenglu.com/beatles/services/trackbacks/194974.html
Singleton妯″紡鏄父鐢ㄧ殑璁捐妯″紡涔嬩竴錛屼絾鏄瀹炵幇涓涓湡姝e疄鐢ㄧ殑璁捐妯″紡鍗翠篃涓嶆槸浠跺鏄撶殑浜嬫儏銆?br />
鏍囧噯鐨勫疄鐜?/pre>
 1 class Singleton
 2 {
 3 public:
 4        static Singleton * Instance()
 5        {
 6               if0== _instance)
 7               {
 8                      _instance = new Singleton;
 9               }
10               return _instance;
11        }
12 protected:
13        Singleton(void)
14        {
15        }
16        virtual ~Singleton(void)
17        {
18        }
19        static Singleton* _instance;
20 };
榪欐槸鏁欑涔︿笂浣跨敤鐨勬柟娉曘傜湅璧鋒潵娌℃湁浠涔堥棶棰橈紝鍏跺疄鍖呭惈寰堝鐨勯棶棰樸備笅闈㈡垜浠竴涓竴涓殑瑙e喅銆?/pre>
闂涓  鑷姩鍨冨溇鍥炴敹
涓婇潰鐨勭▼搴忓繀欏昏浣忓湪紼嬪簭緇撴潫鐨勬椂鍊欙紝閲婃斁鍐呭瓨銆備負浜嗚瀹冭嚜鍔ㄧ殑閲婃斁鍐呭瓨錛屾垜浠紩鍏uto_ptr鏀瑰彉瀹冦?/pre>
 1 #include <memory>
 2 #include <iostream>
 3 using namespace std;
 4 class Singleton
 5 {
 6 public:
 7        static Singleton * Instance()
 8        {
 9               if0== _instance.get())
10               {
11                      _instance.reset( new Singleton);
12               }
13               return _instance.get();
14        }
15 protected:
16        Singleton(void)
17        {
18               cout <<"Create Singleton"<<endl;
19        }
20        virtual ~Singleton(void)
21        {
22               cout << "Destroy Singleton"<<endl;
23        }
24        friend class auto_ptr<Singleton>;
25        static auto_ptr<Singleton> _instance;
26 };
27 //Singleton.cpp
28 auto_ptr<Singleton> Singleton::_instance;
闂浜? 澧炲姞妯℃澘
鍦ㄦ垜鐨勪竴涓伐紼嬩腑錛屾湁澶氫釜鐨凷ingleton綾伙紝瀵筍ingleton綾伙紝鎴戦兘瑕佸疄鐜頒笂闈㈣繖涓鍒囷紝榪欒鎴戣寰楃儲姝諱簡銆備簬鏄垜鎯沖埌浜嗘ā鏉挎潵瀹屾垚榪欎簺閲?br />澶嶇殑宸ヤ綔銆?br />鐜板湪鎴戜滑瑕佹坊鍔犳湰鏂囦腑鏈鍚稿紩浜哄崟浠跺疄鐜幫細
 1 #include <memory>
 2 using namespace std;
 3 using namespace C2217::Win32;
 4  
 5 namespace C2217
 6 {
 7 namespace Pattern
 8 {
 9 template <class T>
10 class Singleton
11 {
12 public:
13        static inline T* instance();
14       
15 private:
16        Singleton(void){}
17        ~Singleton(void){}
18        Singleton(const Singleton&){}
19        Singleton & operator= (const Singleton &){}
20  
21        static auto_ptr<T> _instance;
22 };
23  
24 template <class T>
25 auto_ptr<T> Singleton<T>::_instance;
26  
27 template <class T>
28  inline T* Singleton<T>::instance()
29 {
30        if0== _instance.get())
31        {
32               _instance.reset ( new T);
33        }
34       
35        return _instance.get();
36 }
37  
38 //Class that will implement the singleton mode,
39 //must use the macro in it's delare file
40 #define DECLARE_SINGLETON_CLASS( type ) \
41        friend class auto_ptr< type >;\
42        friend class Singleton< type >;
43 }
44 }
闂涓? 綰跨▼瀹夊叏
涓婇潰鐨勭▼搴忓彲浠ラ傚簲鍗曠嚎紼嬬殑紼嬪簭銆備絾鏄鏋滄妸瀹冪敤鍒板綰跨▼鐨勭▼搴忓氨浼氬彂鐢熼棶棰樸備富瑕佺殑闂鍦ㄤ簬鍚屾椂鎵ц_instance.reset ( new T); 
灝變細鍚屾椂浜х敓涓や釜鏂扮殑瀵硅薄錛岀劧鍚庨┈涓婇噴鏀句竴涓紝榪欒窡Singleton妯″紡鐨勬湰鎰忎笉絎︺傛墍浠ワ紝浣犻渶瑕佹洿鍔犲畨鍏ㄧ殑鐗堟湰錛?/pre>
 1 #include <memory>
 2 using namespace std;
 3 #include "Interlocked.h"
 4 using namespace C2217::Win32;
 5  
 6 namespace C2217
 7 {
 8 namespace Pattern
 9 {
10 template <class T>
11 class Singleton
12 {
13 public:
14        static inline T* instance();
15       
16 private:
17        Singleton(void){}
18        ~Singleton(void){}
19        Singleton(const Singleton&){}
20        Singleton & operator= (const Singleton &){}
21  
22        static auto_ptr<T> _instance;
23        static CResGuard _rs;
24 };
25  
26 template <class T>
27 auto_ptr<T> Singleton<T>::_instance;
28  
29 template <class T>
30 CResGuard Singleton<T>::_rs;
31  
32 template <class T>
33  inline T* Singleton<T>::instance()
34 {
35        if0 == _instance.get() )
36        {
37               CResGuard::CGuard gd(_rs);
38               if0== _instance.get())
39               {
40                      _instance.reset ( new T);
41               }
42        }
43        return _instance.get();
44 }
45  
46 //Class that will implement the singleton mode,
47 //must use the macro in it's delare file
48 #define DECLARE_SINGLETON_CLASS( type ) \
49        friend class auto_ptr< type >;\
50        friend class Singleton< type >;
51 }
52 }
CresGuard 綾諱富瑕佺殑鍔熻兘鏄嚎紼嬭闂悓姝?浠g爜濡備笅錛?/pre>
 1 class CResGuard {
 2 public:
 3    CResGuard()  { m_lGrdCnt = 0; InitializeCriticalSection(&m_cs); }
 4    ~CResGuard() { DeleteCriticalSection(&m_cs); }
 5  
 6    // IsGuarded is used for debugging
 7    BOOL IsGuarded() const { return(m_lGrdCnt > 0); }
 8  
 9 public:
10    class CGuard {
11    public:
12       CGuard(CResGuard& rg) : m_rg(rg) { m_rg.Guard(); };
13       ~CGuard() { m_rg.Unguard(); }
14  
15    private:
16       CResGuard& m_rg;
17    };
18  
19 private:
20    void Guard()   { EnterCriticalSection(&m_cs); m_lGrdCnt++; }
21    void Unguard() { m_lGrdCnt--; LeaveCriticalSection(&m_cs); }
22  
23    // Guard/Unguard can only be accessed by the nested CGuard class.
24    friend class CResGuard::CGuard;
25  
26 private:
27    CRITICAL_SECTION m_cs;
28    long m_lGrdCnt;   // # of EnterCriticalSection calls
29 };
闂鍥?nbsp; 瀹炵敤鏂規(guī)硶
姣斿浣犳湁涓涓渶瑕佸疄鐜板崟浠舵ā寮忕殑綾伙紝灝卞簲璇ヨ繖鏍峰疄鐜幫細
 1 #include "singleton.h"
 2 using namespace C2217::Pattern;
 3  
 4 class ServiceManger
 5 {
 6 public:
 7        void Run()
 8        {
 9        }
10 private:
11        ServiceManger(void)
12        {
13        }
14        virtual ~ServiceManger(void)
15        {
16        }
17        DECLARE_SINGLETON_CLASS(ServiceManger);
18 };
19  
20 typedef Singleton<ServiceManger> SSManger;
鍦ㄤ嬌鐢ㄧ殑鏃跺欏緢綆鍗曪紝璺熶竴鑸殑Singleton瀹炵幇鐨勬柟娉曟病鏈変粈涔堜笉鍚屻?/pre>
1 int _tmain(int argc, _TCHAR* argv[])
2 {
3         SSManger::instance()->Run();
4 }
涓涓畝鍗曠殑Singleton妯″紡鐨勫疄鐜幫紝鍙互鐪嬪埌C++璇█鑳屽悗闅愯棌鐨勪赴瀵岀殑璇剰錛屾垜甯屾湜鏈変漢鑳藉疄鐜頒竴涓洿濂界殑Singleton璁╁ぇ瀹跺涔?fàn)銆?/pre>


Beatles 2012-11-09 14:10 鍙戣〃璇勮
]]>
C++灝嗗瓧絎︿覆杞崲鎴愭暟瀛?http://www.shnenglu.com/beatles/archive/2012/11/09/194956.htmlBeatlesBeatlesFri, 09 Nov 2012 02:06:00 GMThttp://www.shnenglu.com/beatles/archive/2012/11/09/194956.htmlhttp://www.shnenglu.com/beatles/comments/194956.htmlhttp://www.shnenglu.com/beatles/archive/2012/11/09/194956.html#Feedback0http://www.shnenglu.com/beatles/comments/commentRss/194956.htmlhttp://www.shnenglu.com/beatles/services/trackbacks/194956.html
 1 int changestr(char* str)
 2 {
 3        int len = strlen(str);
 4        int sum = 0;
 5        float carry = 1.0/10;
 6        for(int i=0; i<len; i++)
 7        {
 8               carry *= 10;
 9               sum += (str[len-1-i]-'0')*carry;
10        }
11        return sum;
12 }

鍏朵腑sum涓篶arry涓哄綋鍓嶄綅涔嬪墠鐨勫箋?/p>

str[len-1-i]-'0'鏄〃紺哄皢瀛楃鐨刟scii鐮佸噺鍘?鐨刟scii鐮侊紝鏈鍚庡嚭鏉ョ殑鏁板瓧灝辨槸闇瑕佺殑鏁板瓧銆?/p>

姣忔*10鐨勮瘽灝辨妸褰撳墠浣嶅線鍓嶇Щ浜嗐?/p>

 

*鏀硅繘浜嗙畻娉曪紝澧炲姞浜嗘敮鎸佽礋鏁幫紝浠ュ強紕板埌鏈夐棶棰樼殑瀛楃灝變細throw exception



Beatles 2012-11-09 10:06 鍙戣〃璇勮
]]>
浜屽弶鏍?wèi)鐨勪笁绉嶉亶鍘?閫掑綊綆楁硶) http://www.shnenglu.com/beatles/archive/2012/11/09/194955.htmlBeatlesBeatlesFri, 09 Nov 2012 02:04:00 GMThttp://www.shnenglu.com/beatles/archive/2012/11/09/194955.htmlhttp://www.shnenglu.com/beatles/comments/194955.htmlhttp://www.shnenglu.com/beatles/archive/2012/11/09/194955.html#Feedback0http://www.shnenglu.com/beatles/comments/commentRss/194955.htmlhttp://www.shnenglu.com/beatles/services/trackbacks/194955.html 1 struct Node
 2 {
 3     int data;
 4     Node* lchild;
 5     Node* rchild;
 6 }
 7 void preorder(Node* parent)
 8 {
 9     if (parent!=NULL)
10     {
11         cout<<parent->data<<endl;
12         preorder(parent->lchild);
13         preorder(parent->rchild);
14     }
15 }
16 void inorder(Node* parent)
17 {
18     if (parent!=NULL)
19     {
20         inorder(parent->lchild);
21         cout<<parent->data<<endl;
22         inorder(parent->rchild);
23     }
24 }
25 void postorder(Node* parent)
26 {
27     if (parent!=NULL)
28     {
29         postorder(parent->lchild);
30         postorder(parent->rchild);
31         cout<<parent->data<<endl;
32     }
33 }

閲嶆柊鍙堢湅浜嗕竴閬嶄簩鍙夋爲(wèi)(Binary Tree)錛屽彂鐜板緢澶氫笢瑗胯嚜宸辮繕娌℃湁寮勬槑鐧斤紝鍘熸潵涓夌閬嶅巻鏂瑰紡榪樹笉鏄嚜宸辨兂璞′腑鐨勯偅鏍?/p>

鍓嶅簭閬嶅巻(PreOrder)鏄厛杈撳嚭鑷繁錛岀劧鍚庡乏錛屾渶鍚庡彸銆?/p>

涓簭閬嶅巻(InOrder)鏄厛宸︼紝鍐嶈緭鍑鴻嚜宸憋紝鏈鍚庡彸銆?/p>

鍚庡簭閬嶅巻(PostOrder)鏄厛宸︼紝鍐嶅彸錛屾渶鍚庤緭鍑鴻嚜宸便?/p>

鎵璋撶殑XX閬嶅巻灝辨槸鎸囨妸鑷繁鏀懼湪鍝釜浼樺厛浣嶇疆涓婏紝鑰屼笉鏄寚浠庡摢閲屽紑濮嬮亶鍘嗐?/p>

綆椾笅鏉ュ叾瀹炴悳绱㈠尮閰嶄篃鍙互鐢ㄨ繖涓柟娉曪紝鍩烘湰涓婂氨鏄互閫掑綊褰㈡垚鐨勩?/p>

鍙﹀榪橀渶瑕佺爺絀朵竴涓婦FS(Depth First Search)浠ュ強BFS(Breadth First Search)鐨勭畻娉曘?/p>







Beatles 2012-11-09 10:04 鍙戣〃璇勮
]]>
C++涓殑鍗曚緥妯″紡http://www.shnenglu.com/beatles/archive/2012/11/08/194872.htmlBeatlesBeatlesThu, 08 Nov 2012 06:27:00 GMThttp://www.shnenglu.com/beatles/archive/2012/11/08/194872.htmlhttp://www.shnenglu.com/beatles/comments/194872.htmlhttp://www.shnenglu.com/beatles/archive/2012/11/08/194872.html#Feedback0http://www.shnenglu.com/beatles/comments/commentRss/194872.htmlhttp://www.shnenglu.com/beatles/services/trackbacks/194872.html鍗曚緥妯″紡涔熺О涓哄崟浠舵ā寮忋佸崟瀛愭ā寮忥紝鍙兘鏄嬌鐢ㄦ渶騫挎硾鐨勮璁℃ā寮忋傚叾鎰忓浘鏄繚璇佷竴涓被浠呮湁涓涓疄渚嬶紝騫舵彁渚涗竴涓闂畠鐨勫叏灞璁塊棶鐐癸紝璇ュ疄渚嬭鎵鏈夌▼搴忔ā鍧?鍏變韓銆傛湁寰堝鍦版柟闇瑕佽繖鏍風(fēng)殑鍔熻兘妯″潡錛屽緋葷粺鐨勬棩蹇楄緭鍑猴紝GUI搴旂敤蹇呴』鏄崟榧犳爣錛孧ODEM鐨勮仈鎺ラ渶瑕佷竴鏉′笖鍙渶瑕佷竴鏉$數(shù)璇濈嚎錛屾搷浣滅郴緇熷彧鑳芥湁涓涓獥鍙?綆$悊鍣紝涓鍙癙C榪炰竴涓敭鐩樸?

 

鍗曚緥妯″紡鏈夎澶氱瀹炵幇鏂規(guī)硶錛屽湪C++涓紝鐢氳嚦鍙互鐩存帴鐢ㄤ竴涓叏灞鍙橀噺鍋氬埌榪欎竴鐐癸紝浣嗚繖鏍風(fēng)殑浠g爜鏄劇殑寰堜笉浼橀泤銆?浣跨敤鍏ㄥ眬瀵硅薄鑳藉淇濊瘉鏂逛究鍦拌闂疄渚嬶紝浣嗘槸涓嶈兘淇濊瘉鍙0鏄庝竴涓璞?#8212;—涔熷氨鏄闄や簡涓涓叏灞瀹炰緥澶栵紝浠嶇劧鑳藉垱寤虹浉鍚岀被鐨?strong>鏈湴瀹炰緥銆?/p>

銆婅璁℃ā寮忋嬩竴涔︿腑緇欏嚭浜嗕竴縐嶅緢涓嶉敊鐨勫疄鐜幫紝瀹氫箟涓涓?strong>鍗曚緥綾?/strong>錛屼嬌鐢ㄧ被鐨?strong>縐佹湁闈欐佹寚閽堝彉閲?/strong>鎸囧悜綾葷殑鍞竴瀹炰緥錛屽茍鐢ㄤ竴涓?strong>鍏湁鐨勯潤鎬佹柟娉?/strong>鑾峰彇璇ュ疄渚嬨?/p>

鍗曚緥妯″紡閫氳繃綾繪湰韜潵綆$悊鍏跺敮涓瀹炰緥錛岃繖縐嶇壒鎬ф彁渚涗簡瑙e喅闂鐨勬柟娉曘傚敮涓鐨勫疄渚嬫槸綾葷殑涓涓櫘閫氬璞★紝浣嗚璁¤繖涓被鏃訛紝璁╁畠鍙兘鍒涘緩涓涓疄渚嬪茍鎻愪緵 瀵規(guī)瀹炰緥鐨勫叏灞璁塊棶銆傚敮涓瀹炰緥綾籗ingleton鍦ㄩ潤鎬佹垚鍛樺嚱鏁頒腑闅愯棌鍒涘緩瀹炰緥鐨勬搷浣溿備範(fàn)鎯笂鎶婅繖涓垚鍛樺嚱鏁板彨鍋欼nstance()錛屽畠鐨勮繑鍥炲兼槸鍞?涓瀹炰緥鐨勬寚閽堛?/p>

瀹氫箟濡備笅錛?/p>

 1 class CSingleton
 2 
 3 {
 4 
 5 //鍏朵粬鎴愬憳
 6 
 7 public:
 8 
 9 static CSingleton* GetInstance()
10 
11 {
12 
13       if ( m_pInstance == NULL )  //鍒ゆ柇鏄惁絎竴嬈¤皟鐢?/span>
14 
15         m_pInstance = new CSingleton();
16 
17         return m_pInstance;
18 
19 }
20 
21 private:
22 
23     CSingleton(){};
24 
25     static CSingleton * m_pInstance;
26 
27 };

 

鐢ㄦ埛璁塊棶鍞竴瀹炰緥鐨勬柟娉曞彧鏈塆etInstance()鎴愬憳鍑芥暟銆傚鏋滀笉閫氳繃榪欎釜鍑芥暟錛屼換浣曞垱寤哄疄渚嬬殑灝濊瘯閮藉皢澶辮觸錛屽洜涓虹被鐨勬瀯閫犲嚱鏁版槸縐佹湁鐨勩侴etInstance()浣跨敤鎳掓儼鍒濆鍖?/strong>錛屼篃灝辨槸璇村畠鐨勮繑鍥炲兼槸褰撹繖涓嚱鏁伴嬈¤璁塊棶鏃惰鍒涘緩鐨勩傝繖鏄竴縐嶉槻寮硅璁?#8212;—鎵鏈塆etInstance()涔嬪悗鐨勮皟鐢ㄩ兘榪斿洖鐩稿悓瀹炰緥鐨勬寚閽堬細

CSingleton* p1 = CSingleton :: GetInstance();

CSingleton* p2 = p1->GetInstance();

CSingleton & ref = * CSingleton :: GetInstance();

瀵笹etInstance紼嶅姞淇敼錛岃繖涓璁℃ā鏉夸究鍙互閫傜敤浜庡彲鍙樺瀹炰緥鎯呭喌錛屽涓涓被鍏佽鏈澶氫簲涓疄渚嬨?/p>

 

鍗曚緥綾籆Singleton鏈変互涓嬬壒寰侊細

瀹冩湁涓涓寚鍚戝敮涓瀹炰緥鐨勯潤鎬佹寚閽坢_pInstance錛屽茍涓旀槸縐佹湁鐨勶紱

瀹冩湁涓涓叕鏈夌殑鍑芥暟錛屽彲浠ヨ幏鍙栬繖涓敮涓鐨勫疄渚嬶紝騫朵笖鍦ㄩ渶瑕佺殑鏃跺欏垱寤鴻瀹炰緥錛?/p>

瀹冪殑鏋勯犲嚱鏁版槸縐佹湁鐨勶紝榪欐牱灝變笉鑳戒粠鍒鍒涘緩璇ョ被鐨勫疄渚嬨?/p>

 

澶у鏁版椂鍊欙紝榪欐牱鐨勫疄鐜伴兘涓嶄細鍑虹幇闂銆傛湁緇忛獙鐨勮鑰呭彲鑳戒細闂紝m_pInstance鎸囧悜鐨勭┖闂翠粈涔堟椂鍊欓噴鏀懼憿錛熸洿涓ラ噸鐨勯棶棰樻槸錛岃瀹炰緥鐨勬瀽鏋勫嚱鏁頒粈涔堟椂鍊欐墽琛岋紵

濡傛灉鍦ㄧ被鐨勬瀽鏋勮涓轟腑鏈夊繀欏葷殑鎿嶄綔錛屾瘮濡傚叧闂枃浠訛紝閲婃斁澶栭儴璧勬簮錛岄偅涔堜笂闈㈢殑浠g爜鏃犳硶瀹炵幇榪欎釜瑕佹眰銆傛垜浠渶瑕佷竴縐嶆柟娉曪紝姝e父鐨勫垹闄よ瀹炰緥銆?/p>

鍙互鍦ㄧ▼搴忕粨鏉熸椂璋冪敤GetInstance()錛屽茍瀵硅繑鍥炵殑鎸囬拡鎺夌敤delete鎿嶄綔銆傝繖鏍峰仛鍙互瀹炵幇鍔熻兘錛屼絾涓嶄粎寰堜笐闄嬶紝鑰屼笖瀹規(guī)槗鍑洪敊銆傚洜涓鴻繖鏍風(fēng)殑闄勫姞浠g爜寰堝鏄撹蹇樿錛岃屼笖涔熷緢闅句繚璇佸湪delete涔嬪悗錛屾病鏈変唬鐮佸啀璋冪敤GetInstance鍑芥暟銆?/p>

涓涓Ε鍠勭殑鏂規(guī)硶鏄榪欎釜綾昏嚜宸辯煡閬撳湪鍚堥傜殑鏃跺欐妸鑷繁鍒犻櫎錛屾垨鑰呰鎶婂垹闄よ嚜宸辯殑鎿嶄綔鎸傚湪鎿嶄綔緋葷粺涓殑鏌愪釜鍚堥傜殑鐐逛笂錛屼嬌鍏跺湪鎭板綋鐨勬椂鍊欒鑷姩鎵ц銆?/p>

鎴戜滑鐭ラ亾錛岀▼搴忓湪緇撴潫鐨勬椂鍊欙紝緋葷粺浼?strong>鑷姩鏋愭瀯鎵鏈夌殑鍏ㄥ眬鍙橀噺銆備簨瀹炰笂錛岀郴緇熶篃浼氭瀽鏋勬墍鏈夌殑綾葷殑闈欐佹垚鍛樺彉閲忥紝灝卞儚榪欎簺闈欐佹垚鍛樹篃鏄叏灞鍙橀噺涓鏍楓傚埄鐢ㄨ繖涓壒寰侊紝鎴戜滑鍙互鍦ㄥ崟渚嬬被涓畾涔変竴涓繖鏍風(fēng)殑闈欐佹垚鍛樺彉閲忥紝鑰屽畠鐨勫敮涓宸ヤ綔灝辨槸鍦ㄦ瀽鏋勫嚱鏁頒腑鍒犻櫎鍗曚緥綾葷殑瀹炰緥銆傚涓嬮潰鐨勪唬鐮佷腑鐨凜Garbo綾伙紙Garbo鎰忎負鍨冨溇宸ヤ漢錛夛細

 

 1 class CSingleton
 2 
 3 {
 4 
 5 //鍏朵粬鎴愬憳
 6 
 7 public:
 8 
 9 static CSingleton* GetInstance();
10 
11 private:
12 
13     CSingleton(){};
14 
15     static CSingleton * m_pInstance;
16 
17 class CGarbo //瀹冪殑鍞竴宸ヤ綔灝辨槸鍦ㄦ瀽鏋勫嚱鏁頒腑鍒犻櫎CSingleton鐨勫疄渚?/span>
18 
19 {
20 
21         public:
22 
23             ~CGarbo()
24 
25             {
26 
27                 if( CSingleton::m_pInstance )
28 
29                   delete CSingleton::m_pInstance;
30 
31 }
32 
33          }
34 
35         Static CGabor Garbo; //瀹氫箟涓涓潤鎬佹垚鍛橈紝紼嬪簭緇撴潫鏃訛紝緋葷粺浼氳嚜鍔ㄨ皟鐢ㄥ畠鐨勬瀽鏋勫嚱鏁?/span>
36 
37 }錛?/span>

 

綾籆Garbo琚畾涔変負CSingleton鐨勭鏈夊唴宓岀被錛屼互闃茶綾昏鍦ㄥ叾浠栧湴鏂規(guī)互鐢ㄣ?/p>

紼嬪簭榪愯緇撴潫鏃訛紝緋葷粺浼氳皟鐢–Singleton鐨勯潤鎬佹垚鍛楪arbo鐨勬瀽鏋勫嚱鏁幫紝璇ユ瀽鏋勫嚱鏁頒細鍒犻櫎鍗曚緥鐨勫敮涓瀹炰緥銆?/p>

浣跨敤榪欑鏂規(guī)硶閲婃斁鍗曚緥瀵硅薄鏈変互涓嬬壒寰侊細

鍦ㄥ崟渚嬬被鍐呴儴瀹氫箟涓撴湁鐨勫祵濂楃被錛?/p>

鍦ㄥ崟渚嬬被鍐呭畾涔夌鏈夌殑涓撻棬鐢ㄤ簬閲婃斁鐨勯潤鎬佹垚鍛橈紱

鍒╃敤紼嬪簭鍦ㄧ粨鏉熸椂鏋愭瀯鍏ㄥ眬鍙橀噺鐨勭壒鎬э紝閫夋嫨鏈緇堢殑閲婃斁鏃舵満錛?/p>

浣跨敤鍗曚緥鐨勪唬鐮佷笉闇瑕佷換浣曟搷浣滐紝涓嶅繀鍏沖績瀵硅薄鐨勯噴鏀俱?/p>

(鍑哄錛?a >http://hi.baidu.com/csudada/blog/item/208fb0f56bb61266dcc47466.html)

榪涗竴姝ョ殑璁ㄨ

浣嗘槸娣誨姞涓涓被鐨勯潤鎬佸璞★紝鎬繪槸璁╀漢涓嶅お婊℃剰錛屾墍浠ユ湁浜虹敤濡備笅鏂規(guī)硶鏉ラ噸鐜板疄鐜板崟渚嬪拰瑙e喅瀹冪浉搴旂殑闂錛屼唬鐮佸涓?/div>

 

 1 class CSingleton
 2 
 3 {
 4 
 5     //鍏朵粬鎴愬憳
 6 
 7     public:
 8 
 9         static Singleton &GetInstance()
10 
11 {
12 
13     static Singleton instance;
14 
15     return instance;
16 
17 }
18 
19         private:
20 
21             Singleton() {};
22 
23 };

 

浣跨敤灞閮ㄩ潤鎬佸彉閲忥紝闈炲父寮哄ぇ鐨勬柟娉曪紝瀹屽叏瀹炵幇浜嗗崟渚嬬殑鐗規(guī)э紝鑰屼笖浠g爜閲忔洿灝戯紝涔熶笉鐢ㄦ媴蹇冨崟渚嬮攢姣佺殑闂銆?/p>

浣嗕嬌鐢ㄦ縐嶆柟娉曚篃浼氬嚭鐜伴棶棰橈紝褰撳涓嬫柟娉曚嬌鐢ㄥ崟渚嬫椂闂鏉ヤ簡錛?/p>

Singleton singleton = Singleton :: GetInstance();

榪欎箞鍋氬氨鍑虹幇浜嗕竴涓被鎷瘋礉鐨勯棶棰橈紝榪欏氨榪濊儗浜嗗崟渚嬬殑鐗規(guī)с備駭鐢熻繖涓棶棰樺師鍥犲湪浜庯細緙栬瘧鍣ㄤ細涓虹被鐢熸垚涓涓粯璁ょ殑鏋勯犲嚱鏁幫紝鏉ユ敮鎸佺被鐨勬嫹璐濄?/p>

鏈鍚庢病鏈夊姙娉曪紝鎴戜滑瑕佺姝㈢被鎷瘋礉鍜岀被璧嬪鹼紝紱佹紼嬪簭鍛樼敤榪欑鏂瑰紡鏉ヤ嬌鐢ㄥ崟渚嬶紝褰撴椂棰嗗鐨勬剰鎬濇槸GetInstance()鍑芥暟榪斿洖涓涓寚閽堣屼笉鏄繑鍥炰竴涓紩鐢紝鍑芥暟鐨勪唬鐮佹敼涓哄涓嬶細

 

1 static Singleton *GetInstance()
2 
3 {
4 
5 static  Singleton instance;
6 
7 return  &instance;
8 
9 }

 

浣嗘垜鎬昏鐨勪笉濂斤紝涓轟粈涔堜笉璁╃紪璇戝櫒涓嶈繖涔堝共鍛€傝繖鏃舵垜鎵嶆兂璧峰彲浠ユ樉紺虹殑鐢熷懡綾繪嫹璐濈殑鏋勯犲嚱鏁幫紝鍜岄噸杞?= 鎿嶄綔絎︼紝鏂扮殑鍗曚緥綾誨涓嬶細

 

 1 class Singleton
 2 
 3 {
 4 
 5     //鍏朵粬鎴愬憳
 6 
 7     public:
 8 
 9         static Singleton &GetInstance()
10 
11 {
12 
13     static Singleton instance;
14 
15     return instance;
16 
17 }
18 
19         private:
20 
21             Singleton() {};
22 
23             Singleton(const Singleton);
24 
25             Singleton & operate = (const Singleton&);
26 
27 };

 

鍏充簬Singleton(const Singleton); 鍜?Singleton & operate = (const Singleton&); 鍑芥暟錛岄渶瑕佸0鏄庢垚縐佺敤鐨勶紝騫朵笖鍙0鏄庝笉瀹炵幇銆傝繖鏍鳳紝濡傛灉鐢ㄤ笂闈㈢殑鏂瑰紡鏉ヤ嬌鐢ㄥ崟渚嬫椂錛屼笉綆℃槸鍦ㄥ弸鍏冪被涓繕鏄叾浠栫殑錛岀紪璇戝櫒閮芥槸鎶ラ敊銆?/p>

涓嶇煡閬撹繖鏍風(fēng)殑鍗曚緥綾繪槸鍚﹁繕浼氭湁闂錛屼絾鍦ㄧ▼搴忎腑榪欐牱瀛愪嬌鐢ㄥ凡緇忓熀鏈病鏈夐棶棰樹簡銆?/p>

錛堝嚭澶勶細http://snailbing.blogbus.com/logs/45398975.html錛?/p>

浼樺寲Singleton綾伙紝浣夸箣閫傜敤浜庡崟綰跨▼搴旂敤

Singleton浣跨敤鎿嶄綔絎ew涓哄敮涓瀹炰緥鍒嗛厤瀛樺偍絀洪棿銆傚洜涓簄ew鎿嶄綔絎︽槸綰跨▼瀹夊叏鐨勶紝鍦ㄥ綰跨▼搴旂敤涓綘鍙互浣跨敤姝よ璁℃ā鏉匡紝浣嗘槸鏈変竴涓?strong>緙洪櫡錛?灝辨槸鍦ㄥ簲鐢ㄧ▼搴忕粓姝箣鍓嶅繀欏繪墜宸ョ敤delete鎽ф瘉瀹炰緥銆傚惁鍒欙紝涓嶄粎瀵艱嚧鍐呭瓨婧㈠嚭錛岃繕瑕侀犳垚涓嶅彲棰勬祴鐨勮涓猴紝鍥犱負Singleton鐨勬瀽鏋勫嚱鏁板皢鏍規(guī)湰涓嶄細 琚皟鐢ㄣ傝岄氳繃浣跨敤鏈湴闈欐佸疄渚嬩唬鏇垮姩鎬佸疄渚嬶紝鍗曠嚎紼嬪簲鐢ㄥ彲浠ュ緢瀹規(guī)槗閬垮厤榪欎釜闂銆備笅闈㈡槸涓庝笂闈㈢殑GetInstance()紼嶆湁涓嶅悓鐨勫疄鐜幫紝榪欎釜瀹炵幇涓?闂ㄧ敤浜庡崟綰跨▼搴旂敤錛?/p>

 

1 CSingleton* CSingleton :: GetInstance()
2 
3 {
4 
5     static CSingleton inst錛?br />6 
7     return &inst錛?br />8 
9 }

 

鏈湴闈欐佸璞″疄渚媔nst鏄涓嬈¤皟鐢℅etInstance()鏃惰鏋勯狅紝涓鐩翠繚鎸佹椿鍔ㄧ姸鎬佺洿鍒板簲鐢ㄧ▼搴忕粓姝紝鎸囬拡m_pInstance鍙樺緱澶氫綑騫朵笖鍙互浠庣被瀹氫箟涓垹闄ゆ帀錛屼笌鍔ㄦ佸垎閰嶅璞′笉鍚岋紝闈欐佸璞″綋搴旂敤紼嬪簭緇堟鏃惰鑷姩閿姣佹帀錛屾墍浠ュ氨涓嶅繀鍐嶆墜鍔ㄩ攢姣佸疄渚嬩簡銆?/p>

錛堝嚭澶勶細http://blog.csdn.net/pingnanlee/archive/2009/04/20/4094313.aspx錛?/p>

浠g爜瀛︿範(fàn)錛堜粠http://apps.hi.baidu.com/share/detail/32113057寮曠敤錛?/p>


 

  1 #include <iostream>   
  2 
  3 using namespace std;   
  4 
  5 //鍗曚緥綾葷殑C++瀹炵幇   
  6 
  7 class Singleton   
  8 
  9 {   
 10 
 11 private:   
 12 
 13        Singleton();//娉ㄦ剰:鏋勯犳柟娉曠鏈?nbsp;  
 14 
 15           
 16 
 17        static Singleton* instance;//鎯熶竴瀹炰緥   
 18 
 19        int var;//鎴愬憳鍙橀噺(鐢ㄤ簬嫻嬭瘯)   
 20 
 21 public:   
 22 
 23        static Singleton* GetInstance();//宸ュ巶鏂規(guī)硶(鐢ㄦ潵鑾峰緱瀹炰緥)   
 24 
 25        int getVar();//鑾峰緱var鐨勫?nbsp;  
 26 
 27        void setVar(int);//璁劇疆var鐨勫?nbsp;  
 28 
 29        virtual ~Singleton();
 30 
 31 };   
 32 
 33 //鏋勯犳柟娉曞疄鐜?nbsp;  
 34 
 35 Singleton::Singleton()   
 36 
 37 {   
 38 
 39        this->var = 20;   
 40 
 41        cout<<"Singleton Constructor"<<endl;   
 42 
 43 }   
 44 
 45 Singleton::~Singleton()   
 46 
 47 {   
 48 
 49        cout<<"Singleton Destructor"<<endl;
 50 
 51        //delete instance;   
 52 
 53 }   
 54 
 55 //鍒濆鍖栭潤鎬佹垚鍛?nbsp;  
 56 
 57 /*Singleton* Singleton::instance=NULL;
 58 
 59 Singleton* Singleton::GetInstance()   
 60 
 61 {   
 62 
 63        if(NULL==instance)
 64 
 65               instance=new Singleton();
 66 
 67        return instance;   
 68 
 69 }*/
 70 
 71 Singleton* Singleton::instance=new Singleton;
 72 
 73 Singleton* Singleton::GetInstance()   
 74 
 75 {   
 76 
 77        return instance;   
 78 
 79 }     
 80 
 81 //seter && getter鍚暟   
 82 
 83 int Singleton::getVar()   
 84 
 85 {   
 86 
 87        return this->var;   
 88 
 89 }   
 90 
 91 void Singleton::setVar(int var)   
 92 
 93 {   
 94 
 95        this->var = var;   
 96 
 97 }   
 98 
 99 //main   
100 
101 void main()   
102 
103 {   
104 
105        Singleton *ton1 = Singleton::GetInstance();   
106 
107        Singleton *ton2 = Singleton::GetInstance();
108 
109       if(ton1==ton2)
110 
111               cout<<"ton1==ton2"<<endl;
112 
113        cout<<"ton1 var = "<<ton1->getVar()<<endl;
114 
115        cout<<"ton2 var = "<<ton2->getVar()<<endl;   
116 
117        ton1->setVar(150);   
118 
119        cout<<"ton1 var = "<<ton1->getVar()<<endl;
120 
121        cout<<"ton2 var = "<<ton2->getVar()<<endl;
122 
123        delete Singleton::GetInstance();//蹇呴』鏄懼紡鍦板垹闄?/span>
124 
125 





Beatles 2012-11-08 14:27 鍙戣〃璇勮
]]>
C++涓粡鍏哥殑鍗曞悜閾捐〃鍙嶈漿 http://www.shnenglu.com/beatles/archive/2012/11/08/194871.htmlBeatlesBeatlesThu, 08 Nov 2012 06:15:00 GMThttp://www.shnenglu.com/beatles/archive/2012/11/08/194871.htmlhttp://www.shnenglu.com/beatles/comments/194871.htmlhttp://www.shnenglu.com/beatles/archive/2012/11/08/194871.html#Feedback0http://www.shnenglu.com/beatles/comments/commentRss/194871.htmlhttp://www.shnenglu.com/beatles/services/trackbacks/194871.html 1 struct linka {
 2 int data;
 3 linka* next;
 4 };
 5 void reverse(linka*& head) {
 6 if(head ==NULL)
 7     return;
 8 linka *pre, *cur, *ne;
 9 pre=head;
10 cur=head->next;
11 while(cur)
12 {
13    ne = cur->next;
14    cur->next = pre;
15    pre = cur;
16    cur = ne;
17 }
18 head->next = NULL;
19 head = pre;
20 }

鍏朵腑姣旇緝闅劇悊瑙g殑鏄痩inka*& head錛屼紶鍏ョ殑鍏跺疄灝辨槸linka *鐨勭被鍨嬪氨鍙互浜嗭紝linka *鏄〃紺簂inka綾誨瀷鐨勬寚閽堬紝&琛ㄧずhead鐨勫湴鍧錛屼篃灝辨槸linka鐨勬寚閽?/p>

鍙﹀闇瑕佺啛鎮(zhèn)夌殑鏄痟ead->next錛屽叾瀹炴湁鐐瑰儚C#涓殑head.Next錛屽氨鏄痵tructure涓殑涓涓睘鎬?

棣栧厛瀹氫箟3涓寚閽堬紝鍒嗗埆鏄墠涓悗錛岀劧鍚庡綋涓棿閭d釜鎸囬拡闈炵┖錛屽氨鏄綋鍓嶄笉鏄┖錛屽氨鍋氬驚鐜噷鐨勪簨鎯?/p>

娉ㄦ剰鐨勬槸榪欎釜綆楁硶閲岄潰next鏄湪寰幆閲岄潰璧嬪肩殑

姣忔寰幆閮芥妸current鎸囧悜previous浜嗭紝鐒跺悗澶у閮藉線鍚庣Щ涓涓紝next=current->next蹇呴』鍦╟urrent鏀瑰彉鏂瑰悜涔嬪墠鍋氾紝鍚﹀垯鏀瑰彉浜嗘柟鍚戜箣鍚巆urrent鐨刵ext灝卞彉鎴恜revious浜嗐?/p>

鏈鍚庤煩鍑哄驚鐜箣鍚庯紝灝唄eader鐨刵ext棣栧厛緗┖錛屽洜涓篽ead鍙樻垚浜嗘渶鍚庝竴涓猲ode浜嗐傜劧鍚巋ead灝卞彉鎴愪簡previous錛屽洜涓哄綋鏃?current鍜宯ext閮戒負NULL浜嗭紝鍙湁previous涓烘渶鍚庝竴涓妭鐐癸紙鎴栬呰榪欐椂鍊欏簲璇ユ槸絎竴涓潪絀鴻妭鐐癸紝涔熷氨鏄痟ead錛?/p>

緇堜簬鎶婃暣涓畻娉曠悊瑙d簡涓閬嶏紝鏈鍚庢兂鎯沖叾瀹炴尯綆鍗曪紝浣嗘槸鑳界敤c++鍐欏嚭鏉ヤ篃涓嶅お瀹規(guī)槗錛岀壒鍒槸鍦ㄩ潰璇曠殑鏃跺欍?/p>

 

鍐嶅鍔犱竴涓掑綊鐨勫崟閾捐〃鍙嶈漿鐨勬柟娉曪細


 1 static link ReverseLink3(link pNode)   // using recursion
 2         {
 3             if (pNode.next == null)
 4                 return pNode;
 5             link pNext = pNode.next;
 6             link head = ReverseLink3(pNext);
 7             pNext.next = pNode;
 8             pNode.next = null;
 9             return head;
10         }



Beatles 2012-11-08 14:15 鍙戣〃璇勮
]]>
亚洲乱码日产精品a级毛片久久 | 26uuu久久五月天| 精品久久久久久中文字幕| 久久精品国产久精国产| 精品久久久无码中文字幕天天| 久久久久亚洲精品男人的天堂| 噜噜噜色噜噜噜久久| 欧洲人妻丰满av无码久久不卡| 国产亚洲美女精品久久久久狼| 久久99精品九九九久久婷婷| 国产精品久久久久久久app | 亚洲欧美另类日本久久国产真实乱对白| 热久久最新网站获取| 99久久久国产精品免费无卡顿| 一本大道加勒比久久综合| 麻豆久久久9性大片| 久久久91精品国产一区二区三区| 欧美大战日韩91综合一区婷婷久久青草| 亚洲国产精品成人久久| 国产成人无码精品久久久免费 | 久久中文字幕精品| 久久不射电影网| 大香伊人久久精品一区二区| 久久福利青草精品资源站免费| 亚洲精品综合久久| 91精品国产91热久久久久福利| 色综合久久久久综合体桃花网| 精品无码久久久久久久久久| 久久精品麻豆日日躁夜夜躁| 亚洲国产成人久久综合碰| 狠狠色丁香婷综合久久| 国产精品中文久久久久久久| 久久精品国产国产精品四凭| 999久久久无码国产精品| 人妻无码αv中文字幕久久琪琪布| 久久久91精品国产一区二区三区| 日日噜噜夜夜狠狠久久丁香五月 | 精品久久久久久综合日本| 无码人妻久久一区二区三区| 亚洲国产成人精品91久久久| 国内精品久久久久久不卡影院|