![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Вопрос: будет утечка памяти ? -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
конечно.
ведь память сначала выделяется, и только потом выполняется конструктор. |
|||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Дело в том, что на форуме натыкался на тему где какой-то товарищ доказывал, что не в таком случае неважно где память выделена на стеке или в куче, она будет всеравно освобождена.
-------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
вдай ему истину, товарищу тому
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Нет, не будет. Оператор new выделяет память, создает объект (вызывает конструктор) и при исключение очищает память, так-как создание объекта провалилось. Добавлено через 2 минуты и 54 секунды Прав товарищ. Иначе любой выброс исключения из конструктора привел бы к утечке памяти. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
полагаю, вам все же виднее... Artemon, приношу свои извинения за дезинформацию. ибо ответил так, как знал сам. Добавлено через 1 минуту и 1 секунду деструктор, я так полагаю, вызван не будет? |
|||
|
||||
| azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
Нет, ведь объект не был создан, но будут вызваны деструкторы для всех, полностью инициализированных членов.
и это
главную мысль выделил красным, остальные привел, чтобы из контекста было понятно, что речь идет о выбросе исключения из конструктора, т.е. о частично инициализированных объектах. Добавлено через 1 минуту и 47 секунд
на самом деле да, но это выполняется в виде транзакции, т.е. при исключении происходит откат. |
||||||
|
|||||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| azesmcar |
|
||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
вот из деструктора действительно не стоит
а генерировать исключение в конструкторе вполне нормально, более того, это единственный способ сообщить об ошибке выполнения конструктора. |
||||
|
|||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
должно быть правило, чтоб перед выкидом исключения не было "висячих" объектов (т.е. тех которые при раскрутке стека не удалятся, например голые указатель на new-созданный объект).. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Не совсем понятна фраза. Можно раскрыть мысль ? -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 53 Всего: 183 |
В приведенном в первом посте примере предполагается, что исключение может возникнуть из-за неудачного выделения памяти. Представим, что там 2 указателя, по которым память выделяется, а не один. И для первого все выделилось успешно, а для второго - нет. Тогда утечка будет (по первому), т.к. указатели голые, и никто им delete не вызовет.
Кстати, в твоем примере она будет по-любому, без всяких исключений, т.к. ты выделяешь память для временного объекта, который потом теряется. Если буквально смотреть на код. -------------------- ... |
|||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
Понятно. Спасибо всем за ответы, думаю тема исчерпана. -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |