看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《Killercat (殺人貓™)》之銘言: : 還有兩個比較沒被拉出來討論的原因 : 第一個就是前面提到的embedded system, 這點可能要講詳細點 : embedded system如果用c++的話,由於系統特性的關係 : 很多東西都會選擇使用memory pool技術而非vector 這是兩回事吧 memory pool 是為了快速配置物件的記憶體空間 vector 是為了管理動態大小的陣列 兩者負責不一樣的任務 而且 vector 允許你使用自己的 memory allocator 所以你可以寫一個 memory pool 來給 vector 使用 甚至要把其他人寫的 memory pool 接去給 vector 用也是可能的 : memory pool的話,我個人也是傾向於不要自己寫 : loki::smallobject可以解決很多問題 @@a : 真的情況複雜到連loki::smallobject都沒辦法解決的話 : 那再考慮自己去找3rd party或者自己寫 : 不過由於memory pool in C++通常實作上會override掉某些class的placement new/delete : 所以可讀性會下降一點是難免的 vector 正好解決了可讀性的問題 因為它用起來就跟陣列沒兩樣 而且透過自己的 memory allocator 也能兼顧效率 : 另外一個原因則是出乎意料的簡單,因為不想用libc++ 如此而已 XD : 大概整個Project都是用c寫的吧... : - : btw, 大多數case來講vector都是拿來當handle container : (以這例子來講,存的就handle就是pointer) : 其實因為它使用上其實速度跟效率不是很好,通常很少拿來做存實體的用途... 正好相反吧 vector 的存取效率和你直接用 new 配置動態陣列的存取效率根本就一樣 所以存 primitive type 是很適合的 但儲存 handle 你就要考慮 resource leak 的問題 所以最好是自己做一個較安全的容器 或是用 boost::ptr_vector 之類的東西 至於堅持用 new 而不使用 vector 那真的是沒事自找麻煩 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.39.238.241 ※ 編輯: littleshan 來自: 202.39.238.241 (11/04 17:52)
Ebergies:我是覺得無論 handle or primitive type 存 vector 都 ok 11/04 18:08
loveme00835:少兩行 new/delete 可讀性高很多 11/05 02:53
xvid:推可讀性 也可避免一些難讀的指標操作和邊界控制 11/05 09:24