锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
Martin Flower鍦ㄣ婇噸鏋勩嬮噷鎻愬埌絀哄璞℃ā寮忥紝瀵逛簬浠庡鍣ㄤ腑鏌ユ壘澶辮觸闇瑕佽繑鍥炲紩鐢ㄦ椂錛屽彲浠ヤ嬌鐢紝鍚屾椂鎴戣鐨勫浜庣┖鎸囬拡璋冪敤涔熸湁涓瀹氫綔鐢紝璇曚婦涓渚嬶細
2
3 class Mail{
4 public:
5 virtual void print()
6 {std::cout<<"Hello!"<<std::endl;};
7 void* operator new(size_t);
8 };
9
10 class NullMail{
11 NullMail(){};
12 static NullMail inst;
13 public:
14 virtual void print(){
15 using namespace std;
16 cout<<"error! You can't access a NULL object!"<<endl;
17 }
18 static NullMail& GetInst(){return inst;};
19 };
20
21 NullMail NullMail::inst;
22
23 void* Mail::operator new(size_t){
24 return &NullMail::GetInst();
25 }
26
27 Mail* GetMailPtr(){
28 return NULL;
29 }
30
31 Mail& GetMailRef(){
32 return (Mail&)NullMail::GetInst();
33 }
34
35 //

36
37 Mail* ptr_Mail = GetMailPtr();
38 Mail& ref_Mail = GetMailRef();
39 //ptr_Mail->print();
40 ref_Mail.print();
褰撴垜浠繑鍥炰竴涓┖鎸囬拡緇欒皟鐢ㄨ咃紝濡傛灉浠栨病鏈夊垽鏂紝閭e氨浼氬彂鐢熺郴緇熷穿婧冿紝鑰屾垜浠繑鍥炰竴涓┖瀵硅薄鐨勫紩鐢ㄥ氨鍙互閬垮厤榪欎竴鐐廣?/span>
鍙﹀涓涓檮鍔犵殑鏈夎叮鐜拌薄錛屼綘璁や負涓嬮潰鐨勮皟鐢ㄤ細杈撳嚭浠涔堜俊鎭紵
2 ptr_Mail = new Mail;
3 ptr_Mail ->print();
4 ref_Mail.print();
姝g‘鐨勭瓟妗堟槸錛?/span>
2 Hello!
鍥犱負Mail鐨勭己鐪佹瀯閫犲嚱鏁板皢鑷繁鐨剉ptr濉粰浜哊ullMail鍗曚緥銆?/span>
錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛?/span>
涓涓棶棰橈紝鏄笉鏄疢ail鐨勬瘡涓叕鍏辨帴鍙o紝NullMail閮借鍘誨疄鐜頒竴涓嬶紵 錛嶏紞th
//闄ら潪瀹炲湪娌℃湁蹇呰錛岀殑紜簲褰撳疄鐜頒竴涓嬫墍鏈夌殑鍏湁铏氭柟娉曘俢uigang錛?007-11-08
錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛濓紳錛?/span>
“瀵逛簬浠庡鍣ㄤ腑鏌ユ壘澶辮觸闇瑕佽繑鍥炲紩鐢ㄦ椂”錛屼笅鍗堝垰鍒氱鍒頒竴涓繖鏍風殑闂銆?nbsp; jb
]]>
2 char *pCh_a = new char[5]; //鏋勯犱竴涓猚har鏁扮粍錛屽ぇ灝忎負5
2銆丆++鐨勫紓甯稿鐞嗘槸涓嶅彲鎭㈠鐨勩?br>
3銆佺敤鎳掓眽寮忕殑鍗曚歡濡備笅錛屽彲鑳戒駭鐢熺嚎紼嬩笉瀹夊叏銆?br>
2 static singleton* _inst;
3 singleton(){}
4 public:
5 static singleton* get_inst(){
6 if(_inst == 0)
7 _inst = new singleton;
8 return _inst;
9 }
10 }
棣栧厛錛屽湪鍒ょ┖鏃墮噸鍏ヤ細琚玭ew涓ゆ錛屽叾嬈★紝榪斿洖瀹炰緥鐨勬寚閽堬紝鍙兘浼氳浼氳delete鎺夈?
]]>