vector的新增刪除(含動態記憶體釋放)
阿新 • • 發佈:2019-01-03
C++的容器類vector操作功能強大,在實際的專案開發階段應用此功能動態管理物件
問題:
1. 動態申請
2. 新增到容器中
3. 通過迭代器獲取物件
4. 刪除容器中的物件
5. 清除物件實際的快取(防止洩露)
其中前4步都沒有問題,操作一切正常,到第5步時候發現不知道如果清除物件,從網上找到好多例程執行起來不是報錯就是無法刪除,最後經過自己的分析找到了其中的原因,特拿出來分享,請看程式碼
- //容器物件及快取內容定義
- vector <char *> vlist = newnew vector<char *>();
- char *pt = NULL;
-
//新增4個字串陣列
- pt = newchar[5];
- strcpy(pt, "1234");
- vlist->push_back(pt);
- pt = newchar[5];
- strcpy(pt, "2345");
- vlist->push_back(pt);
- pt = newchar[5];
- strcpy(pt, "3456");
- vlist->push_back(pt);
- pt = newchar[5];
- strcpy(pt, "4567");
- vlist->push_back(pt);
- //準備刪除
-
for(;vlist->size()>0;) {
- char *tmp = vlist->at(vlist->size()-1); //獲取物件(地址)
- delete []tmp;//刪除快取
- vlist->pop_back();//彈出列表元素
- }
- delete vlist;