metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2008-10-17 11:34 pm

Об исключениях

Windows Imaging Component от разработчика Микрософт.

Все более-менее понятно, кроме двух вещей:
1) Почему обязательно COM, а не flat API с хендлами?
2) Почему нельзя использовать исключения?

Фиг с ним с COM, это какая-то странная микрософтовская религия, но вот про исключения я не понимаю. Такое ощущение, что в С/С++ какие-то есть тонкости с исключениями, которых я не знаю и которые мешают их использовать.

По-моему, в начале метода гораздо проще выполнить проверки и кинуть исключение, которое обработается там, где юзер нашего API знает, что с ним делать, или показать пользователю сообщение об ошибке, которое будет показано тому, кто знает что с ним делать, чем проверять на каждом уровне вызовов коды возврата ВСЕХ вызовов, которые могут вернуть ошибку.
Причем try finally, по-моему, более простой вариант очистки выделенных ресурсов, чем куча goto и проверок.

UPD: Насчет исключений разъяснили. В c++ try/finally конструкция нестандартная, а вместо нее используется RAII (который еще и менее многословен, вообще-то).

[identity profile] ykaliuta.livejournal.com 2008-10-17 11:25 pm (UTC)(link)
куча goto и есть исключения руками (а что за куча проверок?), если мы об одном и том же. Но обычно не куча а 3-5.

[identity profile] metaclass.livejournal.com 2008-10-18 12:06 am (UTC)(link)
Проверка кодов возвращаемых всеми вызовами, которые могут вызвать ошибку и переход к cleanup. Причем на каждом уровне, где есть выделения ресурсов.

А исключения - это throw, try, finally, catch

[identity profile] ykaliuta.livejournal.com 2008-10-18 07:30 am (UTC)(link)
найдите десять отличий (с)