我们什么时候需要调用std :: string :: capacity()?

时间:2016-12-11 14:01:18

标签: c++ string stl use-case capacity

作为用户,我有std :: string的size()/ resize()/ reserve()来了解和管理所有这些字符串的内存。

但是,我何时必须使用capacity()?是否有任何用例或必要性我应该将此函数称为做某事来实现某些目标?

谢谢!

3 个答案:

答案 0 :(得分:3)

如果由于某种原因想要避免分配内存。例如,在实时应用程序的一个性能非常关键的部分。

答案 1 :(得分:1)

capacity告诉您当前字符串可以存储的最大字符数而不会增加大小。因此,如果您不希望字符串增大并占用更多内存,则可以使用它。

答案 2 :(得分:1)

这是一个很好的问题。通过说用户代码中capacity()的调用是一种代码气味,我冒着火焰战的风险。

调用它的唯一原因是避免在操作中进行内存分配。在这种情况下,更清晰,更容错的策略是创建自己的类(比如limited_length_string)。可能的实现可能预先分配足够的内存(通过它自己的实现或封装std::string并在其上调用reserve()

如果您在代码中看到此调用,那么请注意地雷。如果你写这个电话,那就是你的设计可疑的信号。