Как пользователь, у меня есть std :: string’s size () / resize () / reserve (), чтобы знать и управлять памятью всех этих строк.
Но когда я должен использовать емкость ()? Есть ли какой-либо вариант использования или необходимость, чтобы я вызывал эту функцию, чтобы что-то сделать, чтобы чего-то достичь?
Спасибо!
Это хороший вопрос. Я собираюсь рискнуть войной пламени, говоря, что призвание capacity()
в коде пользователя есть запах кода.
Единственная причина, по которой его можно вызвать, состоит в том, чтобы избежать промежуточного выделения памяти. В этом случае более чистой и более отказоустойчивой стратегией было бы создание собственного класса (скажем, limited_length_string
). Возможная реализация может выделять достаточно памяти заранее (либо через собственную реализацию, либо путем инкапсуляции std::string
и звонит reserve()
в теме.
Если вы видите этот вызов в коде, над которым вы работаете, остерегайтесь наземных мин. Если вы пишете этот вызов, это сигнал о том, что ваш дизайн подозрительный.
Если вы по какой-то причине хотите избежать выделения памяти. Например, в критически важной части приложения реального времени.
Емкость говорит вам максимальное количество символов, которые ваша текущая строка может хранить без увеличения в размере. Поэтому вы будете использовать его, если не хотите, чтобы ваша строка увеличивалась в размере и занимала больше памяти.