[問題] C++ smart pointer產生2維陣列?

看板C_and_CPP (C/C++)作者 (月)時間11年前 (2015/01/20 17:21), 11年前編輯推噓3(306)
留言9則, 5人參與, 最新討論串1/1
請問shared_ptr 有辦法new 動態二維陣列嗎? 原本的 C code : int** p = new int* [3]; for(int i = 0; i < 3; i++) { p[i] = new int [i+1]; } 結果會產生一個2維陣列 [] [][] [][][] 如果現在要改成 shared_ptr,要怎麼做呢? std::shared_ptr<int*> q( new int* [3], []( int **q ) { delete[] *q; } ); for(int i = 0; i < 3; i++) { q.get()+i = shared_ptr<int>(new int[i+1], []( int *q ) { delete[] q; } ); } compile的結果是... cannot convert from 'std::shared_ptr<int>' to 'int **' 不過我改不出正確的結果...有人知道要怎麼寫嗎? 還是我這種用法不對? 有其他的STL可以實現這樣的功能嗎? 先謝過了~m(_ _)m -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.136.126.41 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1421745666.A.973.html ※ 編輯: everydate (223.136.126.41), 01/20/2015 17:23:13

01/20 17:41, , 1F
換我我不會那麼搞剛 我會用std::vector<std::vector>>
01/20 17:41, 1F

01/20 17:45, , 2F
smart pointer通常被用來指向一個物件, 雖然也可以指向陣列,
01/20 17:45, 2F

01/20 17:46, , 3F
但陣列可用vector取代, 不太會去用smart pointer.
01/20 17:46, 3F

01/21 19:00, , 4F
01/21 19:00, 4F

01/21 20:56, , 5F
雙重vector比較快
01/21 20:56, 5F

01/21 21:40, , 6F
別亂拿shared_ptr去指operator new[]生出來的陣列...
01/21 21:40, 6F

01/21 21:41, , 7F
他只會call delete不會call delete[]....
01/21 21:41, 7F

01/21 21:42, , 8F
用vector當然最好 但如果真的要用到陣列該用
01/21 21:42, 8F

01/21 21:42, , 9F
boost::shared_array
01/21 21:42, 9F
文章代碼(AID): #1KlXu2bp (C_and_CPP)
文章代碼(AID): #1KlXu2bp (C_and_CPP)