Re: [問題] 想請教一下 vector 的生命期
看板C_and_CPP (C/C++)作者littleshan (我要加入劍道社!)時間16年前 (2009/02/23 01:12)推噓3(3推 0噓 5→)留言8則, 5人參與討論串3/4 (看更多)
※ 引述《aecho (星空下的鮪魚)》之銘言:
: 推 littleshan:別在 vector 中放 TYPE*,除非你真的知道這樣做的代價 02/21 11:18
: → littleshan:真要放指標,可以用 smart_ptr 02/21 11:19
: 想說還是回文好了
: 如果在vector裡不放TYPE*的話,要放什麼呢?
: 不是很懂不放TYPE*的理由。不知道是否能解釋一下呢?
new 出來的物件要用 delete 回收,這點大家都知道,
但對於放在 vector 中的一堆指標要進行回收時,如果
你只是跑一個 for loop 去 delete,那就很危險了。
因為:
1. 你必須保證同其中沒有重覆的指標指向相同物件
重覆 delete 一個物件是場悲劇。
2. 你必須保證 vector 的操作過程中,若有指標被移出
vector 時,會去呼叫 delete 進行回收,否則會產
生 memory leak。
3. 當你進行 delete 時,必需確定 vector 中的所有指
標不會在其它資料結構中用到。否則使用一塊已經被
delete 回收的記憶體空間,同樣是個悲劇。
當你在 vector 中存指標而非物件本身時,我想最主要的
原因應該是搬移/指涉的效率會比較好,既然有這些操作,
要保持以上三點就變得不太容易。因此若要放指標,最好
改用 boost 的 smart_ptr。
http://www.boost.org/doc/libs/1_38_0/libs/smart_ptr/smart_ptr.htm
smart_ptr 目前是 C++ TR1 中的一個項目,會在下一版
C++ 中成為標準。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.115.151.34
→
02/23 01:19, , 1F
02/23 01:19, 1F
推
02/23 01:22, , 2F
02/23 01:22, 2F
→
02/23 01:23, , 3F
02/23 01:23, 3F
→
02/23 01:29, , 4F
02/23 01:29, 4F
推
02/23 01:58, , 5F
02/23 01:58, 5F
→
02/23 01:58, , 6F
02/23 01:58, 6F
→
02/23 01:59, , 7F
02/23 01:59, 7F
推
02/23 08:08, , 8F
02/23 08:08, 8F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章