[問題] std::shared_ptr std::vector

看板C_and_CPP作者 (shihyu)時間6年前 (2017/09/28 22:40), 6年前編輯推噓6(6017)
留言23則, 5人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: Win10, Linux, ...) Linux 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) g++ #include<iostream> #include<vector> #include <memory> using namespace std; int main() { // M□NM□N matrix (assuming int type elements) initialized with all values as KK const int N = 2; const int M = 4; const int K = 99; std::vector<std::vector<int>>* p = new std::vector<std::vector<int>>(M, std::vector<int>(N, K)); cout << p[0].size() << endl; cout << p[0][0].size() << endl; cout << p->at(0)[0] << endl; delete p; // cout << p->at(0)[0] << endl; return 0; } 我不想用delete 手動回收new 記憶體! 想使用shared_ptr 請問要怎麼把vector 指標用shared_ptr 封裝一起自動回收? shared_ptr<std::vector<std::vector<int> > > p1(new std::vector<std::vector<int>>(M, std::vector<int>(N, 0))); 我這樣包裝對嘛? 有辦法驗證記憶體有回收掉? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 175.182.108.242 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1506609628.A.FD2.html ※ 編輯: shihyu (175.182.108.242), 09/28/2017 22:45:57

09/28 22:47, , 1F
要不要順便學習用auto XD
09/28 22:47, 1F

09/28 23:07, , 2F
為啥不宣告物件就好?
09/28 23:07, 2F

09/28 23:11, , 3F
請問宣告物件是怎樣? 對C++ 不熟XD
09/28 23:11, 3F

09/28 23:19, , 4F
趕著出門 讓其他人回你 xD
09/28 23:19, 4F

09/28 23:39, , 5F
OK! 可以先請問一下問題就是 shared_ptr 怎麼取得裡面
09/28 23:39, 5F

09/28 23:39, , 6F
封裝的vector 的row and col size
09/28 23:39, 6F

09/28 23:39, , 7F
09/28 23:39, 7F

09/28 23:40, , 8F
p1[0].size() & p1[0][0].size() 編譯會錯誤
09/28 23:40, 8F

09/29 00:02, , 9F
你要的是 *p1.size()吧
09/29 00:02, 9F

09/29 00:02, , 10F
vector 跟陣列是不一樣的 你是不是搞混了
09/29 00:02, 10F

09/29 00:03, , 11F
你可以 (*p1)[0]
09/29 00:03, 11F

09/29 00:04, , 12F
不過你也可以 stdvector<int> newVec(3,1)之類
09/29 00:04, 12F

09/29 00:04, , 13F
這是宣告物件
09/29 00:04, 13F

09/29 00:12, , 14F
(*p1)[0] 會編譯失敗...我主要想知道 shared_ptr 包起來
09/29 00:12, 14F

09/29 00:13, , 15F
怎麼取得裡面vector col 大小
09/29 00:13, 15F

09/29 00:32, , 16F
cout << (*p1)[0].size() << endl; // 這樣可以取得col
09/29 00:32, 16F

09/29 01:02, , 17F
steve1012 用shared_ptr 包物件從建構跟解構去驗證回收?
09/29 01:02, 17F

09/29 01:46, , 18F
sp->at(0).at(0)不要用[ ]運算子
09/29 01:46, 18F

09/29 01:49, , 19F
欸不對阿,我用運算子也行
09/29 01:49, 19F

09/29 03:44, , 20F
剛在忙 不過 lph大回你了你有問題再推個文吧
09/29 03:44, 20F

09/29 06:23, , 21F
你可能要先搞清楚shared_ptr的原理...
09/29 06:23, 21F

09/29 06:23, , 22F
shared_ptr的自動回收不是靠GC機制 是靠物件的scope
09/29 06:23, 22F

09/29 06:24, , 23F
來判斷reference count然後在rc=0的時候自爆的
09/29 06:24, 23F
文章代碼(AID): #1PpGdS_I (C_and_CPP)
文章代碼(AID): #1PpGdS_I (C_and_CPP)