如果我调用std::vector::reserve
为我的向量保留一定数量的内存,这个内存是否会一直分配到我销毁我的vector
或者是否有任何方法调用(也许clear
)可以释放我的保留内存?
编辑:我将多次重用容器,因此出于性能原因,我想避免内存分配。正是出于这个原因,我预先保留了内存,所以我想确定我没有做任何事情来丢失分配的内存。
如果我调用std::vector::reserve
为我的向量保留一定数量的内存,这个内存是否会一直分配到我销毁我的vector
或者是否有任何方法调用(也许clear
)可以释放我的保留内存?
编辑:我将多次重用容器,因此出于性能原因,我想避免内存分配。正是出于这个原因,我预先保留了内存,所以我想确定我没有做任何事情来丢失分配的内存。
clear
只影响大小,不影响容量。shrink_to_fit
在 C++11 中可能是您正在寻找的。
编辑:我将多次重用容器,因此出于性能原因,我想避免内存分配。正是出于这个原因,我预先保留了内存,所以我想确定我没有做任何事情来丢失分配的内存。
你只需要避免两件事:
1. shrink_to_fit,但这只是一个释放内存的请求,并不是vector真正必须这样做的。
2.只有swap
空向量才会改变容量(见ideone):
vector<int> v;
v.reserve(100);
vector<int>().swap(v);
ASSERT(v.capacity() == 0);
pop_back 、clear和resize都不会减少向量容量。
顺便说一句,考虑使用std::array<>。