2 class Singleton{
3 static Singleton inst;
4 public:
5 Singleton& GetInst(){
6 return inst;
7 }
8 };
9 Singleton Singleton::inst;
10 // 2nd
11 class Singleton{
12 static Singleton* _inst;
13 public:
14 Singleton& GetInst(){
15 if(_inst == NULL)
16 _inst = new Singleton;
17 return *_inst;
18 }
19 };
20 // 3rd
21 class Singleton{
22 public:
23 Singleton& GetInst(){
24 static Singleton inst;
25 return inst;
26 }
27 }
鎴戜滑宸茬粡鐭ラ亾鏂規(guī)硶1娌℃湁澶氱嚎紼嬮棶棰橈紝浣嗙紪璇戞椂鍒嗛厤鍐呭瓨銆傛柟娉?/span>2鏈夊綰跨▼闂錛屽湪榪愯鏃跺垎閰嶅唴瀛樸傛柟娉?/span>3涔熸湁澶氱嚎紼嬮棶棰橈紝鑰屼笖鍦ㄧ紪璇戞椂鍒嗛厤鍐呭瓨錛屼絾鍦ㄨ繍琛屾椂璋冪敤鏋勯犲嚱鏁般傦紙澶氱嚎紼嬮棶棰樼殑瑙e喅鏂規(guī)硶鍦ㄦ涓嶅啀璧樿堪銆傦級
閭d箞錛屾垜浠彲鑳藉氨璁や負鏂規(guī)硶1铏界劧鍦ㄧ紪璇戞椂鍒嗛厤鍐呭瓨錛屼絾鎴戜滑涓嶅湪涔庤繖鐐瑰唴瀛橈紝鍙嶆鍐欏嚭鏉ユ槸瑕佺敤鐨勶紝榪欑偣鍐呭瓨灝戜笉浜嗭紝鏃㈤伩鍏嶄簡澶氱嚎紼嬶紝鍙堥伩鍏嶄簡鍒嗛厤澶辮觸銆傚氨鐢ㄥ畠浜嗭紒
涓嶅垢鐨勬槸錛屾柟娉?/span>1涔熸湁瀹冭嚜韜殑闂銆備粖澶╂垜鍦ㄦ瀯閫犱竴涓璞″伐鍘傛椂錛屾湡鏈涢氳繃鍏ㄥ眬鍙橀噺錛屽悜宸ュ巶娉ㄥ唽媧劇敓綾葷殑鐢熸垚鏂規(guī)硶鏃訛紝鏂規(guī)硶1鏆撮湶浜嗗畠鐨勯棶棰樸傛瘮濡傛垜浠湪Singleton涓湁涓涓柟娉?/span>RegisterMethod(CallBack*)錛岄偅涔堟垜鍙兘榪欐牱瀹炵幇銆?/span>
緇撴灉鍙戠幇鍦ㄨ皟鐢?/span>RegisterMethod()鏃訛紝Singleton::inst 榪樻病鏈夊垵濮嬪寲錛堟瀯閫犲嚱鏁版病鏈夎璋冪敤錛夈傜┒鍏跺師鍥犳槸緙栬瘧鍣ㄨ櫧鐒跺湪緙栬瘧鏃跺鍏跺垎閰嶅唴瀛橈紝浣嗘槸鏋勯犲嚱鏁版槸鍦ㄨ繍琛屾椂錛屽湪Main()鍑芥暟鍓嶈皟鐢ㄣ傝屽浜庡叏灞鍙橀噺錛岀紪璇戝櫒鏄笉淇濊瘉鍒濆鍖栭『搴忕殑錛佽岃繖涓緥瀛愬氨鏄?/span>tmp鍦ㄦ瀯閫犳椂錛?/span> Singleton::inst 榪樻病鏈夋瀯閫犮?/span>
鑰岃繖涓棶棰樼殑瑙e喅鏂規(guī)硶鍙湁浣跨敤鏂規(guī)硶2鎴栬呮柟娉?/span>3錛岃冭檻鍒版垜浠笉鑳藉湪Main鍑芥暟鍓嶄嬌鐢?/span>new鎿嶄綔絎︼紝鎴戠敤浜嗘柟娉?/span>3銆傚張鍥犱負鎴戞湁鍏ㄥ眬鍙橀噺淇濊瘉錛屽氨鍙互涓嶈冭檻澶氱嚎紼嬮棶棰樹簡銆?/span>
瑕佷箞鏄繖涓棶棰橈紝瑕佷箞鏄偅涓棶棰橈紝浣犳昏瑙e喅涓涓棶棰樸?/span>