作者developers (freestyle skier)
看板C_and_CPP
標題Re: [問題] vector<int *> 會有 memory leak 問題嗎?
時間Mon Mar 14 03:03:15 2011
※ 引述《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)
推 Yshuan:幫推@@ 03/14 14:20
推 tropical72:boost.. 感覺好神,看來還要再多念點書,謝謝d大指點!! 03/14 16:52
推 danielguo:原來還有 ptr_container 這東西 03/17 06:20