Re: [問題] vector<int *> 會有 memory leak 問題嗎?
看板C_and_CPP作者developers (freestyle skier)時間13年前 (2011/03/14 03:03)推噓3(3推 0噓 0→)留言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
03/14 16:52, 2F
推
03/17 06:20, , 3F
03/17 06:20, 3F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 5 之 5 篇):