1,注意存儲的是外部指針的一個拷貝,刪除時首先是刪除這個拷貝指針的內容,也就是刪除外部指針所指向內存的內容,然后再刪除容器中的變量(用來存儲指針的內存).
如:char* ptr = new char[16];
vector<char*> vecPtr;
vecPtr.push_back(ptr);
這個時候是
_ptr = ptr; // 拷貝指針
在vecPtr中存儲的是4個字節的指針拷貝.
2,然后是刪除vector中的指針變量,即N * 4Byte,在vector中是不再重新分配空間的.
詳細代碼如下:
#include "stdafx.h"
#include <vector>
using namespace std;
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;
}