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;
}