2016-12-11 13 views
1

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

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

Спасибо!

ответ

1

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

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

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

2

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

0

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