простой строковый вопрос - PullRequest
2 голосов
/ 12 ноября 2010

Если я присваиваю новое значение слишком ранее объявленной строке, используя operator =, оно освобождается автоматически или я должен освободить его вручную?

<code>
std::string s("value_old");
s = "value_new";

что происходит с "value_old" , где я могу найти или где вы всегда смотрите, чтобы найти ответ на подобные вопросы?Заранее спасибо.

Ответы [ 5 ]

8 голосов
/ 12 ноября 2010

std :: string обрабатывает свою собственную память, поэтому, когда вы используете s = "value_new", строка "value_old" отправляется в забвение.

5 голосов
/ 12 ноября 2010

Да, он освобождается автоматически.

Я предлагаю cplusplus.com для удобной онлайн-ссылки на STL.

1 голос
/ 12 ноября 2010

std::string управляет фактическими данными и отвечает за управление памятью.

Где я могу найти или где вы всегда смотрите, чтобы найти ответ на подобные вопросы?

Для таких вопросов я бы порекомендовал простую книгу по C ++.Список доступен в этом сообщении , но я думаю, что «Язык C ++» (Бьярне Страуструп) был бы хорошим выбором для начала.

1 голос
/ 12 ноября 2010

Обычно: если вы используете std::string, вам не о чем беспокоиться.Это позаботится об этом.

В вашем конкретном случае: очень вероятно, что ваша реализация std::string перезапустит память, которую она имела для "string_old", и повторно использует ее для "string_new".

1 голос
/ 12 ноября 2010

Старое значение освобождается и s становится new_value.

Из исходного кода std :: string , старое значение стирается (из метода erase()) и новое значениеравен inserted и возвращается строка ссылки.См. assign() метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...