看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
james732: 要不要順便學習用auto XD 09/28 22:47
steve1012: 為啥不宣告物件就好? 09/28 23:07
shihyu: 請問宣告物件是怎樣? 對C++ 不熟XD 09/28 23:11
steve1012: 趕著出門 讓其他人回你 xD 09/28 23:19
shihyu: OK! 可以先請問一下問題就是 shared_ptr 怎麼取得裡面 09/28 23:39
shihyu: 封裝的vector 的row and col size 09/28 23:39
shihyu: http://0rz.tw/vJBQ3 09/28 23:39
shihyu: p1[0].size() & p1[0][0].size() 編譯會錯誤 09/28 23:40
steve1012: 你要的是 *p1.size()吧 09/29 00:02
steve1012: vector 跟陣列是不一樣的 你是不是搞混了 09/29 00:02
steve1012: 你可以 (*p1)[0] 09/29 00:03
steve1012: 不過你也可以 stdvector<int> newVec(3,1)之類 09/29 00:04
steve1012: 這是宣告物件 09/29 00:04
shihyu: (*p1)[0] 會編譯失敗...我主要想知道 shared_ptr 包起來 09/29 00:12
shihyu: 怎麼取得裡面vector col 大小 09/29 00:13
shihyu: cout << (*p1)[0].size() << endl; // 這樣可以取得col 09/29 00:32
shihyu: steve1012 用shared_ptr 包物件從建構跟解構去驗證回收? 09/29 01:02
dannypsnl: sp->at(0).at(0)不要用[ ]運算子 09/29 01:46
dannypsnl: 欸不對阿,我用運算子也行 09/29 01:49
steve1012: 剛在忙 不過 lph大回你了你有問題再推個文吧 09/29 03:44
Killercat: 你可能要先搞清楚shared_ptr的原理... 09/29 06:23
Killercat: shared_ptr的自動回收不是靠GC機制 是靠物件的scope 09/29 06:23
Killercat: 來判斷reference count然後在rc=0的時候自爆的 09/29 06:24