STD :: string как параметр-член для динамически размещаемых объектов - PullRequest
0 голосов
/ 15 февраля 2011

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

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

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

1 Ответ

1 голос
/ 16 февраля 2011

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

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

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

...