C++基础——vector内存释放
vector内存释放之前看到这个问题,没有细究,过了两天被问到这个问题!!!为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储。STL实现者在对vector进行内存分配时,预留了一些额外的存储区,用于存放新添加的元素。size():成员指当前拥有的元素个数。capacity():成员指当前(容器必须分配新存储空间之前)可以存储的元素个数。内
·
vector内存释放
之前看到这个问题,没有细究,过了两天被问到这个问题!!!
- 为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储。
- STL实现者在对vector进行内存分配时,预留了一些额外的存储区,用于存放新添加的元素。
- size():成员指当前拥有的元素个数。
capacity():成员指当前(容器必须分配新存储空间之前)可以存储的元素个数。 - 内存空间会自增长,需要存储空间时候,加倍当前容量的分配策略实现重新分配。例如,当前capacity为50,当添加第51个元素时,预留空间不够用了,vector容器会重新分配大小为100的内存空间,作为新连续存储的位置。
- 内存占用空间只增不减,clear(),erase()都是清空元素,但是空间还是没有释放。
- 需要动态清理占用空间可以使用deque(),线性访问,还支持从前添加元素。
- 默认情况下vector执行的是一种“用时间换空间”的做法,耗费大量的时间去不停的释放旧空间,开辟新空间。所以使用vector,最好还是预估一下数据大小,尽可能的减少释放和析构的次数。
- vector的析构函数由系统调用,比如局部变量使用完。
手动释放:
vector nums; nums.push_back(1); vector().swap(nums);||或者nums.swap(vector ())
少有人用的方法: vector S; int* p = S.get_allocator().allocate(10); S.get_allocator().deallocate(p,100);
- vector存的指针的时候,释放vector之前,需要把指针也释放。
- 遍历各个指针
for (vector<void *>::iterator it = v.begin();
it != v.end(); it ++)
if (NULL != *it)
{ delete *it;
*it = NULL;
}
v.clear();
另外可以看看《Effective STL》第十七条款
更多推荐
已为社区贡献1条内容
所有评论(0)