![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,372
|
![]()
Либо не вызывать функции, которые могут вызвать исключение, либо перехватывать исключения внутри деструктора.
К примеру, зачем вам вызывать close в деструкторе? Сокет класс будет разрушен и сам позаботится о себе, а если он этого не делает, то грош цена такому классу. |
![]() |
![]() |
![]() |
#12 |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
![]()
Коротко - исключения никогда не должны вылетать из деструктора.
Мало того, в новых стандартах деструкторы по дефолту являются noexcept, соответственно, если вылетит исключение, то будет вызван std::terminate, который приведет (по дефолту) к вызову std::abort и приложение, фактически, аварийно завершится. Последний раз редактировалось Croessmah; 21.06.2016 в 01:11. |
![]() |
![]() |
![]() |
#13 | |||
БохЪ
Форумчанин
Регистрация: 30.09.2009
Сообщений: 724
|
![]() Цитата:
Цитата:
Цитата:
В планах порабощение вселенной...
Последний раз редактировалось zumm; 21.06.2016 в 21:35. |
|||
![]() |
![]() |
![]() |
#14 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
![]()
Так где утечки-то? Откуда они возьмутся?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
![]() |
![]() |
![]() |
#15 |
БохЪ
Форумчанин
Регистрация: 30.09.2009
Сообщений: 724
|
![]()
Так у нас исключение в деструторе произошло. Единственный способ не выпустить его наружу и продолжить работать - проигнорировать исключение. А значит память не будет освобождена.
На примере из первого поста в теме: close не вызван, сокет не убит, память утекла.
В планах порабощение вселенной...
|
![]() |
![]() |
![]() |
#16 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
![]()
Какое именно исключение у вас может выпасть?
Если функция закрытия сокета вернула ошибку, то вы в любом случае не можете с этим ничего сделать кроме записи в лог или падения. Про наличие утечки зависит от причины ошибки/исключения. Может быть освобождать и нечего раз он не смог? ![]()
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
![]() |
![]() |
![]() |
#17 | |
БохЪ
Форумчанин
Регистрация: 30.09.2009
Сообщений: 724
|
![]() Цитата:
Но вот нам делать, если, к примеру, при попытке закрытия сокета нам говорят, что он занят? Подождать? А сколько подождать? И есть ли у нас вообще право ждать?
В планах порабощение вселенной...
|
|
![]() |
![]() |
![]() |
#18 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,372
|
![]() |
![]() |
![]() |
![]() |
#19 | |
Вредный кошак
Участник клуба
Регистрация: 14.10.2012
Сообщений: 1,159
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Исключения c# | CROWN | C# (си шарп) | 3 | 21.12.2014 18:29 |
Исключения в Qt | iukash | Qt и кроссплатформенное программирование С/С++ | 6 | 16.04.2011 18:54 |
Исключения C++ | Impuls1989 | Помощь студентам | 2 | 04.03.2011 00:51 |
Исключения | yurik1982 | Фриланс | 9 | 16.02.2010 00:34 |
Исключения | Rifler | Общие вопросы Delphi | 5 | 12.11.2008 00:29 |