推 hichcock:跨丟鬼 04/25 16:01
→ azureblaze:沒virtual沒用到this的話foo根本不管p是什麼 04/25 16:04
推 stupid0319:也許p=-1被編譯器當成無義意的語句,優化去掉了 04/25 16:04
推 stupid0319:組語來看p->foo();就是指向foo()而且,所以p是Null沒差 04/25 16:09
推 stupid0319:就算可以,寫這種意義不明的語法,只會被教授扣分而已 04/25 16:12
→ azureblaze:我覺得這個的意義在於你不小心用到NULL pointer的時候 04/25 16:15
→ azureblaze:access violation會發生在第一個動到member的地方 04/25 16:16
→ azureblaze:而不是你call null pointer的地方 04/25 16:16
→ fuha:所以是 complier 自動 optimized 囉? 04/25 17:30
推 shadow0326:我覺得這不算是optimized. 一個class的method不會因為 04/25 17:38
→ shadow0326:instance不同就用不同的記憶體來存method,不同instance 04/25 17:39
→ shadow0326:使用同一個程式碼, 只是stack和this指標不同而已 04/25 17:40
推 purpose:原PO這個在意這個甜頭的話,何不用全域函數就好 04/25 19:38
→ purpose: 麼 ;畢竟不用virtual不用封裝,何必用class 04/25 19:39
→ fuha:沒有特別意思 只是剛看到code很驚訝這樣不會記憶體錯誤 04/25 20:45
→ ccbruce:這是沒問題的, 因為成員函數的呼叫其實是普通函數偷塞this 04/25 22:07
→ james732:所以有些code會出現 void foo() { if(this == NULL) ...} 04/25 22:08
→ ccbruce:這個成員沒用到this指標,所以"剛好"不會有錯誤,但是我認為 04/25 22:08
→ ccbruce:這種不用到this的其它成員的成員根本就是垃圾 04/25 22:09
推 s3748679:^ 還有靜態的成員函數啊,這不需要this哦~ 04/25 22:45