Когда нам нужно вызывать std :: string ::acity ()?

Как пользователь, у меня есть std :: string’s size () / resize () / reserve (), чтобы знать и управлять памятью всех этих строк.

Но когда я должен использовать емкость ()? Есть ли какой-либо вариант использования или необходимость, чтобы я вызывал эту функцию, чтобы что-то сделать, чтобы чего-то достичь?

Спасибо!

1

Решение

Это хороший вопрос. Я собираюсь рискнуть войной пламени, говоря, что призвание capacity() в коде пользователя есть запах кода.

Единственная причина, по которой его можно вызвать, состоит в том, чтобы избежать промежуточного выделения памяти. В этом случае более чистой и более отказоустойчивой стратегией было бы создание собственного класса (скажем, limited_length_string). Возможная реализация может выделять достаточно памяти заранее (либо через собственную реализацию, либо путем инкапсуляции std::string и звонит reserve() в теме.

Если вы видите этот вызов в коде, над которым вы работаете, остерегайтесь наземных мин. Если вы пишете этот вызов, это сигнал о том, что ваш дизайн подозрительный.

1

Другие решения

Если вы по какой-то причине хотите избежать выделения памяти. Например, в критически важной части приложения реального времени.

3

Емкость говорит вам максимальное количество символов, которые ваша текущая строка может хранить без увеличения в размере. Поэтому вы будете использовать его, если не хотите, чтобы ваша строка увеличивалась в размере и занимала больше памяти.

1