shink_to_fit会导致重新分配吗?

时间:2017-05-09 03:08:08

标签: c++ c++11 c++-standard-library

  

缩小以适应---这可能会导致重新分配,但不会影响矢量大小,也不会改变其元素。

在我看来,capacity()总是大于size(),我们可以使用

来完成
deallocate(finish_, endOfStorage_ - finish_);
endOfStorage_ = finish_;

因此永远不需要重新分配。我的意见有什么不对吗?

2 个答案:

答案 0 :(得分:4)

C ++标准库的分配器模型不允许部分释放内存。如果为10 T分配足够的空间,那么您只需要分配那么多空间。你无法删除部分分配;你只能解除所有这些。

因此,如果shrink_to_fit将改变容量,那么它只能通过执行重新分配来实现。

答案 1 :(得分:0)

简而言之...... 是的,shrink_to_fit导致重新分配

请求删除未使用的容量。 这是一个将capacity()减小到size()的非绑定请求。如果请求得到满足,则取决于实现。 如果发生重新分配,则所有迭代器(包括过去的迭代器)以及对元素的所有引用都将失效。如果不进行重新分配,则不会使迭代器或引用失效。