Об исключениях
Windows Imaging Component от разработчика Микрософт.
Все более-менее понятно, кроме двух вещей:
1) Почему обязательно COM, а не flat API с хендлами?
2) Почему нельзя использовать исключения?
Фиг с ним с COM, это какая-то странная микрософтовская религия, но вот про исключения я не понимаю. Такое ощущение, что в С/С++ какие-то есть тонкости с исключениями, которых я не знаю и которые мешают их использовать.
По-моему, в начале метода гораздо проще выполнить проверки и кинуть исключение, которое обработается там, где юзер нашего API знает, что с ним делать, или показать пользователю сообщение об ошибке, которое будет показано тому, кто знает что с ним делать, чем проверять на каждом уровне вызовов коды возврата ВСЕХ вызовов, которые могут вернуть ошибку.
Причем try finally, по-моему, более простой вариант очистки выделенных ресурсов, чем куча goto и проверок.
UPD: Насчет исключений разъяснили. В c++ try/finally конструкция нестандартная, а вместо нее используется RAII (который еще и менее многословен, вообще-то).
Все более-менее понятно, кроме двух вещей:
1) Почему обязательно COM, а не flat API с хендлами?
2) Почему нельзя использовать исключения?
Фиг с ним с COM, это какая-то странная микрософтовская религия, но вот про исключения я не понимаю. Такое ощущение, что в С/С++ какие-то есть тонкости с исключениями, которых я не знаю и которые мешают их использовать.
По-моему, в начале метода гораздо проще выполнить проверки и кинуть исключение, которое обработается там, где юзер нашего API знает, что с ним делать, или показать пользователю сообщение об ошибке, которое будет показано тому, кто знает что с ним делать, чем проверять на каждом уровне вызовов коды возврата ВСЕХ вызовов, которые могут вернуть ошибку.
Причем try finally, по-моему, более простой вариант очистки выделенных ресурсов, чем куча goto и проверок.
UPD: Насчет исключений разъяснили. В c++ try/finally конструкция нестандартная, а вместо нее используется RAII (который еще и менее многословен, вообще-то).
no subject
(Anonymous) 2008-10-17 08:50 pm (UTC)(link)no subject
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
no subject
Вот допустим по поводу полнолуния, захотел повызывать COM-вызовы из... Xslt преобразований, как мне там исключения обрабатывать?...
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)
no subject
(no subject)
(no subject)
no subject
(no subject)
(no subject)
no subject
Ситуация не та, конечно, но если есть возможность не использовать C++ exceptions, их не надо использовать. Имхо.
А COM, я думаю, потому что threading model и маршалинг сразу автоматически, это удобно.
(no subject)
(no subject)
(no subject)
no subject
no subject
Без дураков - я такого больше не видел ни в одном языке программирования.
Суть его очень проста и банальна - на _стеке_ создается некоторый объект, в конструкторе которого производиться захват ресурса, а в деструкторе - освобождение.
Например,
{
boost::scoped_lock lock( some_mutex ); // захватили мьютекс. В деструкторе освободим. Где бы ниже исключение не вылетело - он не останется висящим
std::shared_array< char > text( new char[ 100 ] ); // аналогично
//...
На основе этого построен паттерн "Транзакция"
http://insidecpp.ru/patterns/transaction/
no subject
У меня вот тоже крыша едет от этого всего. Встаешь, темным-темно за окном, домой приходишь, темно, на улице травка зеленая и вечный туман. Гадость... (http://www.spacedev.ru)
no subject
no subject