【发布时间】:2016-12-11 14:01:18
【问题描述】:
作为用户,我有 std::string 的 size()/resize()/reserve() 来了解和管理所有这些字符串的内存。
但是,我什么时候必须使用 capacity()?是否有任何用例或必要性,我应该调用此函数来做某事以实现某事?
谢谢!
【问题讨论】:
标签: c++ string stl use-case capacity
作为用户,我有 std::string 的 size()/resize()/reserve() 来了解和管理所有这些字符串的内存。
但是,我什么时候必须使用 capacity()?是否有任何用例或必要性,我应该调用此函数来做某事以实现某事?
谢谢!
【问题讨论】:
标签: c++ string stl use-case capacity
如果你出于某种原因想要避免分配内存。例如,在实时应用程序的性能非常关键的部分。
【讨论】:
这是个好问题。我会说在用户代码中调用capacity() 是一种代码气味,这会冒着引发激烈战争的风险。
调用它的唯一原因是避免在操作中进行内存分配。在这种情况下,更清洁和更容错的策略是创建自己的类(比如limited_length_string)。一个可能的实现可能会预先分配足够的内存(通过它自己的实现或通过封装std::string 并在其上调用reserve()。
如果您在正在处理的代码中看到此调用,请当心地雷。如果您编写此调用,则表明您的设计有问题。
【讨论】:
容量告诉您当前字符串可以存储的最大字符数而不增加大小。因此,如果您不希望字符串变大并占用更多内存,则可以使用它。
【讨论】: