Re: [問題] this 在什麼情況下會等於NULL??

看板C_and_CPP作者 (眠月)時間14年前 (2010/03/27 16:49), 編輯推噓17(17015)
留言32則, 17人參與, 最新討論串2/8 (看更多)
※ 引述《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

03/27 16:53, , 1F
這樣不會coredump嗎?
03/27 16:53, 1F

03/27 16:56, , 2F
你可以試試看阿 :D
03/27 16:56, 2F

03/27 17:08, , 3F
謝謝你 我還是先看完 Null Pointer Pattern 好了
03/27 17:08, 3F

03/27 17:09, , 4F
說不定看完就懂了 XD
03/27 17:09, 4F

03/27 17:36, , 5F
原來有這種用法 太神奇了 XD
03/27 17:36, 5F

03/27 18:26, , 6F
唔..比起直接丟 NULL 進去好像常見的還是丟個什麼事都不做的
03/27 18:26, 6F

03/27 18:26, , 7F
object 進去的樣子 (我是說 Null Object Pattern)
03/27 18:26, 7F

03/27 18:40, , 8F
不好意思 這邊不會當掉是因為沒用到this的資料嗎?
03/27 18:40, 8F

03/27 18:43, , 9F
在這種情況下 不能用class的non-static資料 是嗎??
03/27 18:43, 9F

03/27 18:56, , 10F
沒錯
03/27 18:56, 10F

03/27 19:16, , 11F
那這樣是不是表示我們在寫member function的時候
03/27 19:16, 11F

03/27 19:16, , 12F
都應該要檢查this指標
03/27 19:16, 12F

03/27 19:16, , 13F
因為好像沒辦法阻止使用者寫 A *a = NULL;a->f();
03/27 19:16, 13F

03/27 20:15, , 14F
如果f()是static function呢?
03/27 20:15, 14F

03/27 20:27, , 15F
static member function 沒有 this ...
03/27 20:27, 15F

03/28 00:41, , 16F
推一下, 以前都沒注意到這個@_@"
03/28 00:41, 16F

03/28 07:08, , 17F
推推~
03/28 07:08, 17F

03/28 13:34, , 18F
為什麼會有這種用法?
03/28 13:34, 18F

03/28 17:45, , 19F
推 滿神奇的
03/28 17:45, 19F

03/28 19:54, , 20F
檢查 this 還不如讓它當掉
03/28 19:54, 20F

03/28 20:37, , 21F
客戶不喜歡會當的程式...
03/28 20:37, 21F

03/28 21:09, , 22F
看完還是不懂為何要用Null object Pattern..OTL
03/28 21:09, 22F

03/29 01:14, , 23F
讓他當掉不見得好
03/29 01:14, 23F

03/29 01:14, , 24F
有種說法是對於可能的錯誤使用情況
03/29 01:14, 24F

03/29 01:14, , 25F
讓他在編譯期就編不過 比執行期才當掉容易debug
03/29 01:14, 25F

03/29 08:51, , 26F
this 是 0 這種東西在執行期根本不可以發生
03/29 08:51, 26F

03/29 08:52, , 27F
如果為了這東西一直去檢查 this 你的 code 會雜亂無比
03/29 08:52, 27F

03/29 08:53, , 28F
別忘了 this 為 0 時所有 member variable 都 invalid
03/29 08:53, 28F

03/29 09:46, , 29F
@_@" 原來還可以這樣做呀~~
03/29 09:46, 29F

03/29 20:57, , 30F
不可以發生 可是這篇文章不就是在說這種狀況會發生嗎
03/29 20:57, 30F

03/29 20:59, , 31F
除非有辦法阻止這種code通過編譯
03/29 20:59, 31F

07/23 23:25, , 32F
未定義...
07/23 23:25, 32F
文章代碼(AID): #1BhSQmEi (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1BhSQmEi (C_and_CPP)