Re: [問題] vector<int *> 會有 memory leak 問題嗎?

看板C_and_CPP作者 (freestyle skier)時間13年前 (2011/03/14 03:03), 編輯推噓3(300)
留言3則, 3人參與, 最新討論串5/5 (看更多)
※ 引述《tropical72 (藍影)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : vs2008 : 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) : 問題(Question): : 使用動態配置之 vector<int *> 是否會有 memory leak 問題 ? : 程式碼(Code):(請善用置底文網頁, 記得排版) : #define M 5 : #define N 4 : vector<int *> v; : int *ptr=NULL; : for(size_t m=0; m!=M; ++m){ : ptr = new int[N]; : for(size_t n=0; n!=N; ++n){ : ptr[i] = rand() %100; : v.pushback(ptr); : } : } : 請問這段程式碼是否會有 memory leak ? 針對這個問題 請參考Effective STL (Scott Meyers) Item 7 (P.36 ~ P.40) 裡面有完整的描述 它的結論是使用shared_ptr 如此一來不會有memory leak,就算在call delete之前throw exception,也 能保證destructor能被call到: std::vector<boost::shared_ptr<int> > v; 但就vector<shared_ptr<> >而言,其實還有另一個更有效率的東西: boost::ptr_vector<> 這是一個專門裝ptr的vector http://www.boost.org/doc/libs/1_46_1/libs/ptr_container/doc/ptr_container.html (裡面有比較二種方法的優缺點) 回歸到問題的本質 如果須求是要一個多維陣列,而且又沒有dynamic擴張陣列size的須求 也許可以考慮 boost::multi_array<> http://www.boost.org/doc/libs/1_46_1/libs/multi_array/doc/user.html -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 76.110.96.167 ※ 編輯: developers 來自: 76.110.96.167 (03/14 03:07)

03/14 14:20, , 1F
幫推@@
03/14 14:20, 1F

03/14 16:52, , 2F
boost.. 感覺好神,看來還要再多念點書,謝謝d大指點!!
03/14 16:52, 2F

03/17 06:20, , 3F
原來還有 ptr_container 這東西
03/17 06:20, 3F
文章代碼(AID): #1DVHJsza (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1DVHJsza (C_and_CPP)