Re: [問題] 想請教一下 vector 的生命期

看板C_and_CPP作者 (我要加入劍道社!)時間15年前 (2009/02/23 01:12), 編輯推噓3(305)
留言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
下一版的C++什麼時候會現世呢?
02/23 01:19, 1F

02/23 01:22, , 2F
VC++2008 有內建一些TR1 包含regexp
02/23 01:22, 2F

02/23 01:23, , 3F
正確的來說 是 Visual C++ 2008 SP1
02/23 01:23, 3F

02/23 01:29, , 4F
這幾點都跟用指標陣列會遇到的問題一樣啊..
02/23 01:29, 4F

02/23 01:58, , 5F
通常會把 pointer 包到 vector 裡,這種 vector 大都會被
02/23 01:58, 5F

02/23 01:58, , 6F
封裝成某個 class 的 data member 了,destructor 有寫好
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
文章代碼(AID): #19eOTsPh (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #19eOTsPh (C_and_CPP)