1. 程式人生 > >vector的新增刪除(含動態記憶體釋放)

vector的新增刪除(含動態記憶體釋放)

C++的容器類vector操作功能強大,在實際的專案開發階段應用此功能動態管理物件

問題:

1. 動態申請

2. 新增到容器中

3. 通過迭代器獲取物件

4. 刪除容器中的物件

5. 清除物件實際的快取(防止洩露)

其中前4步都沒有問題,操作一切正常,到第5步時候發現不知道如果清除物件,從網上找到好多例程執行起來不是報錯就是無法刪除,最後經過自己的分析找到了其中的原因,特拿出來分享,請看程式碼

  1. //容器物件及快取內容定義
  2. vector <char *> vlist = newnew vector<char *>();  
  3. char *pt = NULL;  
  4. //新增4個字串陣列
  5. pt = newchar[5];  
  6. strcpy(pt, "1234");  
  7. vlist->push_back(pt);  
  8. pt = newchar[5];  
  9. strcpy(pt, "2345");  
  10. vlist->push_back(pt);  
  11. pt = newchar[5];  
  12. strcpy(pt, "3456");  
  13. vlist->push_back(pt);  
  14. pt = newchar[5];  
  15. strcpy(pt, "4567");  
  16. vlist->push_back(pt);  
  17. //準備刪除
  18. for(;vlist->size()>0;) {  
  19.     char *tmp = vlist->at(vlist->size()-1); //獲取物件(地址)
  20.     delete []tmp;//刪除快取
  21.     vlist->pop_back();//彈出列表元素
  22. }  
  23. delete vlist;