|
|
|
Exception handling
|
|||
|---|---|---|---|
|
#18+
Всем привет. А как обходиться в C++ без finally в try блоке? Т.е. что делать вместо try { DoSomething(); } finally { Cleanup(); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:18 |
|
||
|
Exception handling
|
|||
|---|---|---|---|
|
#18+
try { ; } catch(...) { } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:21 |
|
||
|
Exception handling
|
|||
|---|---|---|---|
|
#18+
не, не так, здесь catch(...) не поможет у finally в c# (о нем речь?) совсем другая семантика можно добится сходного поведения двумя путями (1) после блока catch(...) поставить код освобождения ресурсов, но при условиях: - в блоках try и обработчиков нет return - в блоках обработчиков не возбуждаются неперехватываемые исключения - освобождаемые ресурсы не локальны внутри блока try (2) использовать локальные для try-блока врапперы ресурсов с освобождением их в деструкторах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:36 |
|
||
|
Exception handling
|
|||
|---|---|---|---|
|
#18+
Голенков Владимирне, не так, здесь catch(...) не поможет у finally в c# (о нем речь?) совсем другая семантика Да finally как C# или в Delphi. (1) после блока catch(...) поставить код освобождения ресурсов, но при условиях: - в блоках try и обработчиков нет return - в блоках обработчиков не возбуждаются неперехватываемые исключения - освобождаемые ресурсы не локальны внутри блока try это не подходит (2) использовать локальные для try-блока врапперы ресурсов с освобождением их в деструкторах А вот это можно попробовать. Если я правильно понял речь идет о след.: try { MyResourceType mr(); } catch() { } А в деструкторе MyResourceType код освобождения. Хотя нафига тогда try вообще? при выходе из скопа функции у меня деструктор все равно вызовется, хоть по исключению хоть по простому return. Я заметил, что VC подсвечивает слова finally и __finally как ключевые, но ругается, когда я их в коде использую. Почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:48 |
|
||
|
Exception handling
|
|||
|---|---|---|---|
|
#18+
egorovshuraА в деструкторе MyResourceType код освобождения. Хотя нафига тогда try вообще? Как область отлова инсключений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:51 |
|
||
|
Exception handling
|
|||
|---|---|---|---|
|
#18+
Я заметил, что VC подсвечивает слова finally и __finally как ключевые, но ругается, когда я их в коде использую. Почему? это расширения от MS: In addition to try and catch clauses, CLR exception handling supports a finally clause. The semantics are identical to the __finally block in structured exception handling (SEH). A __finally block can follow a try or catch block. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 14:59 |
|
||
|
Exception handling
|
|||
|---|---|---|---|
|
#18+
Голенков Владимир Я заметил, что VC подсвечивает слова finally и __finally как ключевые, но ругается, когда я их в коде использую. Почему? это расширения от MS: In addition to try and catch clauses, CLR exception handling supports a finally clause. The semantics are identical to the __finally block in structured exception handling (SEH). A __finally block can follow a try or catch block. Блин. А в unmanaged C++ можно его как-нить использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 15:05 |
|
||
|
Exception handling
|
|||
|---|---|---|---|
|
#18+
Кажется нашел. Нужно использовать ключевые слова с префиксом из двух подчеркиваний: __try { } __finally { } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 15:11 |
|
||
|
Exception handling
|
|||
|---|---|---|---|
|
#18+
Блин. А в unmanaged C++ можно его как-нить использовать? вероятно можно, ведь structured exception handling (SEH) появилось задолго до CLR да вот только непереносимо лично я не пользовался ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 15:14 |
|
||
|
Exception handling
|
|||
|---|---|---|---|
|
#18+
egorovshuraА как обходиться в C++ без finally в try блоке? Мы в свое время просто написать макрос. Не помню его реализацию, суть в том, что код Код: plaintext 1. 2. преобразовывался в Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 15:30 |
|
||
|
Exception handling
|
|||
|---|---|---|---|
|
#18+
softwarer egorovshuraА как обходиться в C++ без finally в try блоке? Мы в свое время просто написать макрос. Не помню его реализацию, суть в том, что код Код: plaintext 1. 2. преобразовывался в Код: plaintext 1. 2. 3. 4. 5. 6. Это не то же самое. Если эксепшен произойдет в клинапе (X). Думаю после этого приложение не выживет. Вообще странно, что в стандарте языка нет такой конструкции. По-моему она слишком полезная чтобы ее стороной обходить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 16:33 |
|
||
|
Exception handling
|
|||
|---|---|---|---|
|
#18+
egorovshuraА как обходиться в C++ без finally в try блоке? Т.е. что делать вместо try { DoSomething(); } finally { Cleanup(); } Использовать RAII, RAII и еще раз RAII ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 16:36 |
|
||
|
Exception handling
|
|||
|---|---|---|---|
|
#18+
egorovshuraЭто не то же самое. Не то же. Но для практических целей достаточно хорошо. egorovshuraЕсли эксепшен произойдет в клинапе (X). Думаю после этого приложение не выживет. Я не помню, защищались ли мы от этого (сейчас я все-таки привел суть, а не тонкости), но не считаю это принципиальным. Помнить, конечно, нужно. egorovshuraВообще странно, что в стандарте языка нет такой конструкции. По-моему она слишком полезная чтобы ее стороной обходить Скажем так, для меня вообще странно отсутствие многих конструкций в некоторых языках. Сходу, это finally, properties, изменение области видимости члена класса, публикация, полная или выборочная, членов объектного члена класса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2006, 17:48 |
|
||
|
Exception handling
|
|||
|---|---|---|---|
|
#18+
ZrenBy egorovshuraА как обходиться в C++ без finally в try блоке? Т.е. что делать вместо try { DoSomething(); } finally { Cleanup(); } Использовать RAII, RAII и еще раз RAII ... А что это такое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2006, 11:46 |
|
||
|
Exception handling
|
|||
|---|---|---|---|
|
#18+
"Использовать RAII, RAII и еще раз RAII ..." А что это такое? а в Гугле набрать?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2006, 11:57 |
|
||
|
Exception handling
|
|||
|---|---|---|---|
|
#18+
Прочитал в википедии про RAII. Очень конечно хороший подход, но что делать с классами, которые я не могу изменить? Сторонняя библиотека к которой у меня нет исходников. Не оборачивать же все классы в свои соответствующие философии RAII. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2006, 11:59 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34086440&tid=2030174]: |
0ms |
get settings: |
11ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
263ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 575ms |

| 0 / 0 |
