STD::string как параметр-член для динамически размещаемых объектов

Я хочу динамически размещать множество объектов (может быть несколько сотен). Часть этих объектов - текстовые поля. Поскольку std:: string предлагает хорошие манипуляции со строками, я бы предпочел иметь параметры-члены объекта типа std: string.

Однако std:: string является динамически изменяемым объектом. Для меня это идет вразрез с динамически размещенными объектами, содержащими std:: string: может быть переполнение выделенной памяти, если std:: string становится больше, чем планировалось.

  • Могу ли я спросить совета, подходит ли std:: string в качестве параметра для динамически размещаемых объектов?
  • Как манипулировать с помощью std:: string, чтобы не было переполнения памяти?
  • Подходит ли std:: string в качестве параметра-члена, даже если сотни объектов будут размещены динамически?

1 ответ

Решение

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

class foo {
  public:
    std::string str;
};

а вам интересно, как изменяется размер строки? Позвольте мне попытаться объяснить: размер объектов класса foo фиксирован. Размер строкового члена также фиксирован, но он содержит в своей реализации указатель на дополнительную динамическую память (в другом месте), которую он увеличивает или уменьшает в зависимости от содержимого строки. Реализация std::string позаботится об этом за вас, вам не нужно беспокоиться об этом. Также не будет переполнения памяти - память строки - это другой блок памяти, чем, например, блок foo-object.

Другие вопросы по тегам