![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
Etud |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 9.11.2007 Репутация: нет Всего: нет |
Удаляется ли строка s2 из памяти при вызове функции:
|
|||
|
||||
KaraKum |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Да.
В момент "return s2;" она будет скопирована в возвращаемое значение функции и все данные по значение что были созданы в функции FindUrl (в том числе и s2) будут удалены из памяти (из стека, если быть точнее). |
|||
|
||||
Etud |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 9.11.2007 Репутация: нет Всего: нет |
Спасибо. С функцией ясно.
Но основную строку после работы надо удалить, вызвав деструктор. Есть по разному 1) s.~basic_string(); 2) s.~string(); 1-й вариант всегда пашет, а вот с 2-м не совсем ясно. |
|||
|
||||
KaraKum |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Деструктор будет вызван автоматически при выходе из функции.
Добавлено через 40 секунд Самому его вызывать не надо (нельзя). |
|||
|
||||
Etud |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 9.11.2007 Репутация: нет Всего: нет |
||||
|
||||
Estranged |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 30.8.2010 Репутация: нет Всего: 3 |
||||
|
||||
Etud |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 9.11.2007 Репутация: нет Всего: нет |
||||
|
||||
Estranged |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 30.8.2010 Репутация: нет Всего: 3 |
А почему она должна удалиться именно в этой функции, в FindUrl?
Когда придет время, вызывающая функция, или вызывающая вызывающую (рекурсия) сама вызовет деструктор в положенном месте. Передается s через ссылку, а не через копию: (const std::string & s) |
|||
|
||||
Etud |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 9.11.2007 Репутация: нет Всего: нет |
А, мы не поняли друг друга ! Не именно в этой функции, а основном коде. ВОПРОС ПРО ДЕСТРУКТОРЫ В СИЛЕ Есть по разному 1) s.~basic_string(); 2) s.~string(); 1-й вариант всегда пашет, а вот с 2-м не совсем ясно. Это сообщение отредактировал(а) Etud - 30.12.2010, 15:37 |
|||
|
||||
Estranged |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 158 Регистрация: 30.8.2010 Репутация: нет Всего: 3 |
Так уже отвечали: деструктор будет вызван автоматически, руками писать не надо ничего.
|
|||
|
||||
KaraKum |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 640 Регистрация: 3.12.2007 Репутация: нет Всего: 1 |
Я повторюсь: деструктор НИКОГДА нельзя вызывать вручную.
Добавлено через 4 минуты и 14 секунд Если объект (любой - в нашем частном случае это std::string) создан по значению:
то деструктор объекта будет вызван автоматически когда придёт время. А если объект создан по указателю:
то деструктор будет вызван именно в момент
и нигде и никогда более. Добавлено через 5 минут и 56 секунд В случае с std::string, если создавать их по значению, можно выполнять ЛЮБЫЕ операции с ними - утечек памяти не будет и ничего самому удалять не нужно. |
||||||
|
|||||||
Etud |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 9.11.2007 Репутация: нет Всего: нет |
ок, все понял.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |