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); // 這樣就沒問題了