Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Для новичков > Удаление строки |
Автор: Etud 30.12.2010, 14:03 | ||
Удаляется ли строка s2 из памяти при вызове функции:
|
Автор: KaraKum 30.12.2010, 14:07 |
Да. В момент "return s2;" она будет скопирована в возвращаемое значение функции и все данные по значение что были созданы в функции FindUrl (в том числе и s2) будут удалены из памяти (из стека, если быть точнее). |
Автор: Etud 30.12.2010, 14:42 |
Спасибо. С функцией ясно. Но основную строку после работы надо удалить, вызвав деструктор. Есть по разному 1) s.~basic_string(); 2) s.~string(); 1-й вариант всегда пашет, а вот с 2-м не совсем ясно. |
Автор: KaraKum 30.12.2010, 14:43 |
Деструктор будет вызван автоматически при выходе из функции. Добавлено через 40 секунд Самому его вызывать не надо (нельзя). |
Автор: Etud 30.12.2010, 15:02 |
Я про удаление основной строки (s), переданной в функцию. Она используется ранее. Про строку s2 прояснили. |
Автор: Estranged 30.12.2010, 15:04 |
А зачем тогда ей (s) квалификатор const, если собираетесь модифицировать ее? За вызовом деструктора можно наблюдать, открыв в отладке одно дизассемблера и выполняя пошагово код. |
Автор: Estranged 30.12.2010, 15:28 |
А почему она должна удалиться именно в этой функции, в FindUrl? Когда придет время, вызывающая функция, или вызывающая вызывающую (рекурсия) сама вызовет деструктор в положенном месте. Передается s через ссылку, а не через копию: (const std::string & s) |
Автор: Etud 30.12.2010, 15:35 | ||
А, мы не поняли друг друга ! Не именно в этой функции, а основном коде. ВОПРОС ПРО ДЕСТРУКТОРЫ В СИЛЕ Есть по разному 1) s.~basic_string(); 2) s.~string(); 1-й вариант всегда пашет, а вот с 2-м не совсем ясно. |
Автор: Estranged 30.12.2010, 15:53 |
Так уже отвечали: деструктор будет вызван автоматически, руками писать не надо ничего. |
Автор: KaraKum 30.12.2010, 15:54 | ||||||
Я повторюсь: деструктор НИКОГДА нельзя вызывать вручную. Добавлено через 4 минуты и 14 секунд Если объект (любой - в нашем частном случае это std::string) создан по значению:
то деструктор объекта будет вызван автоматически когда придёт время. А если объект создан по указателю:
то деструктор будет вызван именно в момент
и нигде и никогда более. Добавлено через 5 минут и 56 секунд В случае с std::string, если создавать их по значению, можно выполнять ЛЮБЫЕ операции с ними - утечек памяти не будет и ничего самому удалять не нужно. |
Автор: Etud 30.12.2010, 17:09 |
ок, все понял. |