Re: [問題] this 在什麼情況下會等於NULL??
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
07/24 14:52, 1F
哈因為我見識淺薄,之前不知道有很多人把這個當一個設計模式在談。
※ 編輯: Favonia 來自: 140.112.30.39 (07/24 18:22)
推
07/24 18:23, , 2F
07/24 18:23, 2F
推
07/24 18:26, , 3F
07/24 18:26, 3F
→
07/24 23:03, , 4F
07/24 23:03, 4F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 5 之 8 篇):