看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《bgcrwf (老王)》之銘言: : 最近在看程式碼的時候 有看到一段搞不懂 : if (this) { : // blah.... : } else { : // blah.... : } : 想請教各位 : 在什麼情況下程式會進到else這個區塊來呢?? : 想很久想不出來 : 謝謝 像這樣的情況就會是哩: A *a = NULL ; a->f() ; 這樣 a::f() 裡面拿到的 this 就是 NULL。 會這樣設計的原因, 可以參考一個叫做 "Null Pointer(Object) Pattern" 的手法。 -- To iterate is human, to recurse, divine. 遞迴只應天上有, 凡人該當用迴圈.   L. Peter Deutsch -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.160.116.159
bgcrwf:這樣不會coredump嗎? 03/27 16:53
yoco315:你可以試試看阿 :D 03/27 16:56
bgcrwf:謝謝你 我還是先看完 Null Pointer Pattern 好了 03/27 17:08
bgcrwf:說不定看完就懂了 XD 03/27 17:09
james732:原來有這種用法 太神奇了 XD 03/27 17:36
LPH66:唔..比起直接丟 NULL 進去好像常見的還是丟個什麼事都不做的 03/27 18:26
LPH66:object 進去的樣子 (我是說 Null Object Pattern) 03/27 18:26
bgcrwf:不好意思 這邊不會當掉是因為沒用到this的資料嗎? 03/27 18:40
bgcrwf:在這種情況下 不能用class的non-static資料 是嗎?? 03/27 18:43
firose:沒錯 03/27 18:56
fragileness:那這樣是不是表示我們在寫member function的時候 03/27 19:16
fragileness:都應該要檢查this指標 03/27 19:16
fragileness:因為好像沒辦法阻止使用者寫 A *a = NULL;a->f(); 03/27 19:16
hexen2:如果f()是static function呢? 03/27 20:15
dendrobium:static member function 沒有 this ... 03/27 20:27
VictorTom:推一下, 以前都沒注意到這個@_@" 03/28 00:41
loveme00835:推推~ 03/28 07:08
andyjy12:為什麼會有這種用法? 03/28 13:34
yayarice:推 滿神奇的 03/28 17:45
HudsonE:檢查 this 還不如讓它當掉 03/28 19:54
loveme00835:客戶不喜歡會當的程式... 03/28 20:37
ilovebbs:看完還是不懂為何要用Null object Pattern..OTL 03/28 21:09
fragileness:讓他當掉不見得好 03/29 01:14
fragileness:有種說法是對於可能的錯誤使用情況 03/29 01:14
fragileness:讓他在編譯期就編不過 比執行期才當掉容易debug 03/29 01:14
Ebergies:this 是 0 這種東西在執行期根本不可以發生 03/29 08:51
Ebergies:如果為了這東西一直去檢查 this 你的 code 會雜亂無比 03/29 08:52
Ebergies:別忘了 this 為 0 時所有 member variable 都 invalid 03/29 08:53
aecho:@_@" 原來還可以這樣做呀~~ 03/29 09:46
fragileness:不可以發生 可是這篇文章不就是在說這種狀況會發生嗎 03/29 20:57
fragileness:除非有辦法阻止這種code通過編譯 03/29 20:59
Favonia:未定義... 07/23 23:25