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

看板C_and_CPP作者 (小西風最乖了*^^*)時間14年前 (2011/07/23 16:12), 編輯推噓3(301)
留言4則, 3人參與, 最新討論串5/8 (看更多)
yoco315 大的實作好像有點怪怪的...(兩篇一起回) ※ 引述《yoco315 (眠月)》之銘言: : 像這樣的情況就會是哩: : A *a = NULL ; : a->f() ; : 這樣 a::f() 裡面拿到的 this 就是 NULL。 C++ 裡面是應該是未定義。(標準沒有 200% 清楚的寫出來,不過 我相信這是沒有爭議的解讀法!)可以執行純粹是編譯器剛好這樣做。 主要是因為 a->f() 差不多相當於 (*a).f() : 會這樣設計的原因, : 可以參考一個叫做 "Null Pointer(Object) Pattern" 的手法。 : 推 LPH66:唔..比起直接丟 NULL 進去好像常見的還是丟個什麼事都不做的 03/27 18:26 : → LPH66:object 進去的樣子 (我是說 Null Object Pattern) 03/27 18:26 Null Object Pattern 的精神是塞一個有相同介面,但完全不做事 的物件。故意不用語言內建空指標,是因為空指標可能會帶來無窮的災 難,然後自己寫的物件不會。所以如 LPH66 大指出,還是另外自己建一 個物件吧。 ※ 引述《yoco315 (眠月)》之銘言: : 很多人看到 if (this) 都覺得很奇怪這樣不會 core dump 嗎? : C++ 的確不會 core dump,但是 Java 會 NullPointerException,哈哈哈, : 這邊在 C++ 只是單純的跳到那個 member function 的位置去繼續執行, : 一直到程式碼去存取 data member 的時候才會發生 invalid access。 這比較像編譯器逆向工程,跟 C++ 本身沒有絕對的關係 orz(因為 這個版討論主題的關係我就把 Java 部份刪掉了...)(我個人覺得 Java 還是離理想差很遠 xD...) 其實就連編譯器逆向工程恐怕都有點危險。我相信如果是 virtual function 大部分實作都需要看一下 this. : 一個觀點是 Design Pattern 的存在是因為語言本身的不足。 : 正因為語言沒有提供這個功能,所以我們透過 Design Pattern 去作到某些事, 非常同意這點。我甚至可以說現在很多設計模式,都只是因為常見 物件導向語言很多難用的地方。然後它們也沒有完全解決問題 orz --- 註:Wikipedia 真的是什麼怪東西都有... http://en.wikipedia.org/wiki/Null_Object_pattern -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.30.39 ※ 編輯: Favonia 來自: 140.112.30.39 (07/24 05:42)

07/24 14:52, , 1F
Null Object pattern 有什麼奇怪的?
07/24 14:52, 1F
哈因為我見識淺薄,之前不知道有很多人把這個當一個設計模式在談。 ※ 編輯: Favonia 來自: 140.112.30.39 (07/24 18:22)

07/24 18:23, , 2F
null object pattern在obj-C裡真的是丟nil (NULL)進去 @@
07/24 18:23, 2F

07/24 18:26, , 3F
直接從語言特性上支援這個pattern
07/24 18:26, 3F

07/24 23:03, , 4F
那還是用C好了... 當a是NULL時 a->f()會科科XD
07/24 23:03, 4F
文章代碼(AID): #1EAlBOFF (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1EAlBOFF (C_and_CPP)