作者littleshan (我要加入劍道社!)
看板C_and_CPP
標題Re: [問題] 不傾向使用std::vector的原因
時間Sun Nov 4 17:51:28 2012
※ 引述《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