c++ vector 釋放內存

1.釋放單個指針數組

關於Vector中存放指針的問題,在進行清空的時候比較安全的一種作法是:
    std::vector<ClassName *> ClassNameVec;
    ...push_back(new ClassName());
    std::vector<ClassName *>::iterator ClassNameIt = ClassNameVec.begin();
    for(;ClassNameIt != ClassNameVec.end();++ClassNameIt)
    {    
        if(*ClassNameIt != NULL)
        {
          delete *ClassNameIt;
          *ClassNameIt = NULL;
        }  
    }
    ClassNameVec.clear();安全


2.釋放數組函數

vector <int*>    vecInt; 
for   (int   i   =0      ;i    <   10000;   i++) 

int*   pint   =new   int[100]; 
vecInt.push_back(pint); 

vector <int*> ::iterator   it_INT; 
for   (it_INT   =   vecInt.begin()   ;   it_INT   !=   vecInt.end();   it_INT++) 

    delete[]   (*it_INT); 

vecInt.clear();spa

 

3 先釋放內容,在釋放內存指針

,注意存儲的是外部指針的一個拷貝,刪除時首先是刪除這個拷貝指針的內容,也就是刪除外部指針所指向內存的內容,而後再刪除容對象

器中的變量(用來存儲指針的內存).內存

#include "stdafx.h"
#include <vector>
using namespace std;it

int _tmain(int argc, _TCHAR* argv[])
{
vector<char*> vecPtr;
char* ptr = new char[16];
ptr[0] = 0;
memcpy(ptr, "abc", 16);
vecPtr.push_back(ptr);
vector<char*>::iterator it = vecPtr.begin();
for (; it != vecPtr.end(); )
{
   delete[] *it;
   it = vecPtr.erase(it);
}
return 0;
}變量

 

4.注意臨時變量帶來的風險gc

在vector中存放東西要注意如下幾點
存放不一樣對象沒有任何問題,頂多就是耗費內存

可是若是存放指針時 請注意如下幾點

vector<type1*> ConType;

ConType LtType;

void Add()
{
  Type1 temp;
  LtType.pushback(&temp); // 注意這個地方有問題。temp的實際地址空間在棧中, 函數結束後, temp就將被釋放,這個時候

vector中的內存指向就是非法。  能夠以下這麼改  Type1* temp = new Type1(); // 這個時候temp在堆上  LtType.pushback(temp); // 這樣就沒問題了

相關文章
相關標籤/搜索