![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
EvilsInterrupt, с целью показать, что файл, открытый в конструкторе дочернего объекта FileOpener, не закроется, если выбросить исключение из A:A().
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
EvilsInterrupt |
|
||||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
>>EvilsInterrupt, с целью показать, что файл, открытый в конструкторе дочернего объекта FileOpener, не закроется, если выбросить исключение из A:A().
Дело в том что то что сделано до работы тела вашего конструктора, откатится само! ;) А все что сделано в вашем теле, вами в ручную так сказать, то в случае ошибки перед выбрасыванием исключения , вы должны откатить сами!!! Об этом я и писал:
и:
|
||||
|
|||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
EvilsInterrupt, OK, судя по всему мы не прийдём к общему мнению, и каждый останется при своём. Мне кажется, что действия по удалению/очищению/откату следует делать в деструкторе, а не в конструкторе. Заметьте, что я не говорил, что нельзя выбрасывать исключения из конструктора, я лишь говорил, что это - дурной тон, причём с добавлением:
Предлагаю за сим hollywar закончить ![]() Это сообщение отредактировал(а) borisbn - 20.6.2010, 12:32 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
P.S. Sorry за
![]() ISergeyN, а как ты в своём первом посте выделил фон символа & -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
borisbn, Если излишне к Вам.. прошу простить. Просто люблю аргументацию, от которой не отвертеться ;) Из всего приведенного мною выше на ваши ответы, у меня только один ответ : Как вы поступаете , если выделены\получены\открыты ресурсы в теле конструктора , а под конец скажем из 5 успешных действий у вас вдруг отработали только 3, что тогда ?
|
|||
|
||||
borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Удаляю/отдаю/закрываю только те, для которых всё было успешно выделено.
Подписываюсь, но в случае, когда под аргументами есть неоспоримые доказательства. Согласен ? ![]() Это сообщение отредактировал(а) borisbn - 20.6.2010, 13:40 -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
EvilsInterrupt, почитайте про RAII
|
|||
|
||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
>> EvilsInterrupt, почитайте про RAII
А это :
не попадает под RAII ? Захват ресурса в точке инициализации, потом проверка ;) или чтото не так? |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
не подпадает.. освобождаться ресурсы должны автоматически в деструкторе..
Добавлено через 1 минуту и 18 секунд
http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%...%86%D0%B8%D1%8F |
||||
|
|||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
Получение?
Вот:
совмещено с инциализацией! >>а освобождение — с уничтожением объекта. Деструктор не привел, тема про конструктор!!! То что не приведено еще не означает, что не написано совсем, но спасибо за напоминание ;) Это RAII ! т.к. получение в секции инициализации. Только одно многие забывают, что деструктор не будет вызван , если тело вашего конструктора не отработало полностью!!! Таким образом бросая исключение вы лишаете себя работы деструктора и это означает, что именно вы берете на себя отвественность за освобождение ресурсов в случае некорректного создания объекта. Об этом-то я и писал выше в посте |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 17 Всего: 110 |
при бросании исключении в конструкторе деструктор для этого объекта действительно не будет вызван, но вот деструкторы членов объекта - будут
в данном случае, если бы m_hSCManager имел деструктор, в котором был вызов CloseServiceHandle, не пришлось бы вручную его вызывать ни в деструкторе, ни в обработке ошибки в конструкторе -------------------- qqq |
|||
|
||||
EvilsInterrupt |
|
|||
Executables research ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1019 Регистрация: 14.7.2007 Где: Железнодорожный, МО, Россия Репутация: 2 Всего: 9 |
>>но вот деструкторы членов объекта - будут
Об этом я и писал, вот:
>>в данном случае, если бы m_hSCManager имел деструктор, в котором был вызов CloseServiceHandle, не пришлось бы вручную его вызывать ни в деструкторе, ни в обработке ошибки в конструкторе Да, согласен! Но в данной ситуации это не объект класса, а хэндл полученный в результате вызова Win32(Wow64) функции! Поэтому-то мне и надо откатываться самому вызовом CloseServicHandle, т.к. за меня никто этого не сделает !!! |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
не туда смотрите.. речь не об объекте, конструктор которого Вы привели..в данном случае он нам не интересен.. Речь о "технологии " примененной внутри конструктора .. При проектированнии в стиле RAII не пришлось бы так нагружать логику конструктора.. ![]() Добавлено через 2 минуты и 2 секунды
Так вместо того чтоб в каждом месте использовать сырой хэндл, легче в одном месте написать обертку - и сразу разгрузиться все остальное ![]() |
||||
|
|||||
bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 63 Всего: 196 |
EvilsInterrupt, это делается так:
|
|||
|
||||
kemiisto |
|
|||
![]() Дикий Кот. =^.^= ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Участник Клуба Сообщений: 3292 Регистрация: 29.7.2007 Репутация: 2 Всего: 160 |
Ни Макконнелла, случайно, начитались? -------------------- |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |