|
|
|
ООП
|
|||
|---|---|---|---|
|
#18+
Такой вопрос больше из области теории. Пишу свой класс, который в конструкторе может выбрасывать исключения. Я так понимаю это не хорошо. Можно сделать простейший конструктор и затем вызывать метод init для объекта в котором производить инициализацию, но это тоже не лучший подход, т.к. после отработки конструктора объект не инициализирован со всеми вытекающими из этого последствиями. Так как быть в данном случае? Поделитесь опытом, пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2007, 11:26:34 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
пример нехорошего, как вы сказали, конструктора: Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2007, 11:45:13 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
bemtaillТакой вопрос больше из области теории. Пишу свой класс, который в конструкторе может выбрасывать исключения. Я так понимаю это не хорошо. Можно сделать простейший конструктор и затем вызывать метод init для объекта в котором производить инициализацию, но это тоже не лучший подход, т.к. после отработки конструктора объект не инициализирован со всеми вытекающими из этого последствиями. Так как быть в данном случае? Поделитесь опытом, пожалуйста. Кто вам сказал? Если инициализация класса жизненно важна и без него дальнейший запуск не имеет смысла (например, отсутствуют ресурсы, отсутствует доступ к СУБД и т.д.) — вполне можно thrown'ить Exception и вываливаться с предсмертными воплями. Если вы извне перехватываете исключения, то должны ожидать, что инстанс может быть не инициализировать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2007, 11:45:18 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
Даже более того выдавать наружу Exception это хорошая практика. Даже в конструкторе :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2007, 11:46:29 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
Хрюхрюшкин.Даже более того — выдавать наружу Exception — это хорошая практика. Даже в конструкторе :) Мне почему-то казалось, что нужно избегать исключений в конструкторе (из C++ еще помню).. Спасибо большое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2007, 11:50:24 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
мне пофигу. я против. имхо оочень неудобно. я за ленивую инициализацию. при отладке гораздо лучше найти и просмотреть объедкт кот при своей инициализации шо-то кинул. и например рискнуть повторить её. checked тож в топку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2007, 11:53:30 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
bemtaill Мне почему-то казалось, что нужно избегать исключений в конструкторе (из C++ еще помню).. Спасибо большое. Это не C++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2007, 12:12:09 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
bemtaill Хрюхрюшкин.Даже более того — выдавать наружу Exception — это хорошая практика. Даже в конструкторе :) Мне почему-то казалось, что нужно избегать исключений в конструкторе (из C++ еще помню).. Спасибо большое. Вы неправильно помните. В С++ исключение как раз и были введены в том числе как механизм сообщения об ошибках в конструкторах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2007, 17:53:33 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
funikovyuri bemtaill Хрюхрюшкин.Даже более того — выдавать наружу Exception — это хорошая практика. Даже в конструкторе :) Мне почему-то казалось, что нужно избегать исключений в конструкторе (из C++ еще помню).. Спасибо большое. Вы неправильно помните. В С++ исключение как раз и были введены в том числе как механизм сообщения об ошибках в конструкторах В С++ при неосторожном обращении с исключениями в конструкторе можем получить наполовину сформированный объект. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2007, 18:02:56 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
bemtaill В С++ при неосторожном обращении с исключениями в конструкторе можем получить наполовину сформированный объект. В Java вы можете быть спокойным. То, что не проинициализировалось, будет зачищено GC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2007, 18:12:29 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
bemtaill funikovyuri bemtaill Хрюхрюшкин.Даже более того — выдавать наружу Exception — это хорошая практика. Даже в конструкторе :) Мне почему-то казалось, что нужно избегать исключений в конструкторе (из C++ еще помню).. Спасибо большое. Вы неправильно помните. В С++ исключение как раз и были введены в том числе как механизм сообщения об ошибках в конструкторах В С++ при неосторожном обращении с исключениями в конструкторе можем получить наполовину сформированный объект. Давайте сразу примеры, а то заявления вида "неосторожный", "иногда", "может" и т.д. - это не серьезно. Я в обоснование сказанного мной могу привести Алена Голуба http://www.cyberguru.ru/programming/cpp/cpp-programming-rules2-page71.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2007, 18:13:59 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
funikovyuri Давайте сразу примеры, а то заявления вида "неосторожный", "иногда", "может" и т.д. - это не серьезно. Я в обоснование сказанного мной могу привести Алена Голуба http://www.cyberguru.ru/programming/cpp/cpp-programming-rules2-page71.html Примеры будут если поможете с: http://www.sql.ru/forum/actualthread.aspx?tid=455468 :) Нет времени сейчас отвлекаться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2007, 18:20:40 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
bemtaill funikovyuri Давайте сразу примеры, а то заявления вида "неосторожный", "иногда", "может" и т.д. - это не серьезно. Я в обоснование сказанного мной могу привести Алена Голуба http://www.cyberguru.ru/programming/cpp/cpp-programming-rules2-page71.html Примеры будут если поможете с: http://www.sql.ru/forum/actualthread.aspx?tid=455468 :) Нет времени сейчас отвлекаться... Я имел ввиду, что если конструктор в C++ выбрасывает исключения, то в случае если программер не ловит его при создании объекта получаем наполовину сформированный объект и пытаемся работать с ним как с обычным. Возможно я не много неправильно выразился в начале : "это не хорошо" = "источник лишних возможных проблем". Хотя конечно в Java это не грозит, т.к. всегда исключение поймаем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2007, 14:20:54 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
Интерсно, а будет утечка при вызове конструктора и вызовется ли деструктор? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2007, 14:52:24 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
biomenИнтерсно, а будет утечка при вызове конструктора и вызовется ли деструктор? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Проверте. PS: http://www.cyberguru.ru/programming/cpp/cpp-programming-rules2-page73.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2007, 14:59:35 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
Спасиб, но просто нет компилятора. Видимо вызовется:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2007, 15:13:14 |
|
||
|
ООП
|
|||
|---|---|---|---|
|
#18+
bemtaill bemtaill funikovyuri Давайте сразу примеры, а то заявления вида "неосторожный", "иногда", "может" и т.д. - это не серьезно. Я в обоснование сказанного мной могу привести Алена Голуба http://www.cyberguru.ru/programming/cpp/cpp-programming-rules2-page71.html Примеры будут если поможете с: http://www.sql.ru/forum/actualthread.aspx?tid=455468 :) Нет времени сейчас отвлекаться... Я имел ввиду, что если конструктор в C++ выбрасывает исключения, то в случае если программер не ловит его при создании объекта получаем наполовину сформированный объект и пытаемся работать с ним как с обычным. Возможно я не много неправильно выразился в начале : "это не хорошо" = "источник лишних возможных проблем". Хотя конечно в Java это не грозит, т.к. всегда исключение поймаем. Не понял, если честно. Еще раз повторяю - отстутствие возможности сообщать об ошибках конструктора - одна из причин по которым исключения вообще появились в С++. Все остальное детали реализации конкретных компиляторов и их соответствие стандарту. Сейчас в большинстве современных компиляторов С++ все нюансы (например с освобождением памяти и вызовом деструктора) уже учтены ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2007, 17:13:09 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=34682447&tid=2145054]: |
0ms |
get settings: |
16ms |
get forum list: |
21ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
52ms |
get topic data: |
20ms |
get forum data: |
5ms |
get page messages: |
77ms |
get tp. blocked users: |
2ms |
| others: | 326ms |
| total: | 533ms |

| 0 / 0 |
