→ VVll:從星海板 轉過來的星海1->Diable 07/24 18:13
→ StupidGaGa:就是這篇,謝謝大大 07/24 19:16
→ StupidGaGa:在請問各位大大,請問有第二部分跟第三部分嗎? 07/25 14:08
推 cjcat2266:原文有第二部分連結,第三部分好像還沒出 07/25 14:48
推 cowbaying:沒耐心的可以先看程式碼 07/25 15:34
推 Killercat:這code頗怪 混合了C跟C++的概念(抓頭) 07/25 19:05
→ VVll:這篇 程式設計師犯的最大錯誤, 批評自己不熟悉的語言 07/25 19:06
→ Killercat:老實講拿掉operator=跟template 我會以為這是C code 07/25 19:06
→ Killercat:而且老實講我不了解 這實作看起來並沒有任何比std::list 07/25 19:10
→ Killercat:優越的地方,是我忽略了什麼重點嗎.... o_oa? 07/25 19:10
→ Killercat:應該說 std::linkedlist 07/25 19:10
→ Killercat:std::linkedlist配上boost::shared_ptr應該會好一點 07/25 19:10
→ Killercat:er...是std::link...java寫多了C++ STL class都搞混了 07/25 19:12
→ Killercat:還有一個可能是STL的記憶體配置方法採取的演算法頗暴力 07/25 19:17
→ Killercat:一次都是要一塊以後 超過就要兩倍... 不過我還是不明白 07/25 19:18
→ Killercat:的是 自己做一個std::list<T, allocator>會簡單的多 07/25 19:18
→ Killercat:有板友能看出為什麼他捨去這方法而用自製的理由嗎? 07/25 19:19
→ VVll:因為作者 是寫c code的, 他對c++還有oo 完全不熟 07/25 19:24
→ azureblaze:而且他的時代oo才剛起步一團糟所以他的印象也很差 07/25 20:38
→ azureblaze:而且那個時代的硬體會讓人很計較4個byte或indirection 07/25 20:39
推 Killercat:那我可以完全理解為什麼這東西怎麼看都是披著C++皮的C.. 07/25 21:23
→ StupidGaGa:Cool!感謝各位大大幫忙,我一直都想了解頂尖程式人員 07/25 21:23
→ StupidGaGa:的想法與經驗,沒想到得到的比我想像中的多^^ 07/25 21:24
→ Killercat:還有那恐怖的Macro(我還特地gcc -E看了一下) 07/25 21:24
推 cjcat2266:那個macro我倒覺得沒什麼耶...適度的用是ok的 07/26 00:08
→ cjcat2266:inlist在遊戲開發算是頗熱門的結構,Box2D也用它 07/26 00:09
推 cjcat2266:Patrick的inlist用到的bitwis運算子的確有點太超過 07/26 00:57
→ cjcat2266:我看過的inlist中已經沒人在這樣搞了XD 07/26 00:58
→ Killercat:不用阿 -_-a 直接繼承std::list其實就是in-list了 07/26 08:28
→ Killercat:等等...不是繼承list... 早上起來腦袋不清醒 XD 07/26 08:29
推 cowbaying:頂尖程式員會讓一般人覺得很跳針 XDDDD 07/26 08:57
→ StupidGaGa:請問有前輩可以第一個圖跟第二個圖嗎? 07/26 10:15
→ StupidGaGa:忘了說,是第二部分文章的圖 07/26 10:16
→ StupidGaGa:我看得懂程式碼跟圖 07/26 10:17
→ StupidGaGa:但是我看不懂為什麼這個程式碼會形成這個圖~"~ 07/26 10:18
→ StupidGaGa:希望有前輩可以指導討論一下 07/26 10:18
推 cjcat2266:喔,他的std::list圖畫錯了,下面comment有講 07/26 10:38
→ cjcat2266:別擔心,如果你看得懂程式碼,那你想像中的圖應該是對的 07/26 10:38
→ cjcat2266:他畫的是std::list<T *>,不是std::list<T> 07/26 10:39
推 cjcat2266:這篇文的插圖有比較清楚展示inlist多重link的結構 07/26 11:20
→ Killercat:其實std::list是可以改造成in-list的 不過我剛剛試作了 07/26 14:57
→ Killercat:一下,並不是很簡單就是,所以早上我說的「繼承std::lis 07/26 14:58
→ Killercat:t」是句還滿糗的話 07/26 14:58
→ Killercat:另外 改造成in-list的話 std::list的allocator整個廢掉 07/26 14:58
→ Killercat:不過還是很有改造價值.... 07/26 14:59
→ Killercat:我是用SGI版本的std::list實作版本魔改的 要是改的出來 07/26 14:59
→ Killercat:的話,晚點跟大家分享一下 07/26 14:59
推 FukadaKyoko:我有看過一本書還是哪邊寫 不要繼承std的東西 XD 07/26 15:36
→ FukadaKyoko:真的要用的話 就把std的東西宣告成自己class的member 07/26 15:36
推 cjcat2266:或是用private繼承,然後自己定義新的介面也ok 07/26 15:57
推 franknine:Effective C++ 的 item 7 Declare destructors virtual 07/26 16:17
推 franknine:因為 std 的東西 destructor 不是 virtual 07/26 16:33
推 Killercat:其實effective c++(還是more?)有一個很經典的例子 07/26 17:16
→ Killercat:他告訴你要實作一個大小寫不分的string 07/26 17:16
→ Killercat:要怎麼繼承basic_string, 怎麼繼承怎麼修改template 07/26 17:17
→ Killercat:整個流程其實把修改stl該注意的東西都含括了70%了 07/26 17:17
→ Killercat:不過std::list要改成in-list可能得用別的小手段來做... 07/26 17:18
推 Casval:那個時代別說沒有標準程式庫,連C++都沒有可相容的標準,所 07/27 15:47
→ Casval:以多半都要自己手工打造所有的部分。現在語言有標準,程式 07/27 15:48
→ Casval:庫也很精良,正確的使用下效能沒問題,安心地用吧! 07/27 15:50