Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Похоже, вы не в курсе про историю с оператором new. 16.08.04 02:39 Число просмотров: 1737
Автор: Ktirf <Æ Rusakov> Статус: Elderman
|
> Но, если есть вылезанная функция ДЛЛ, что возвращает > HRESULT-код, то почему не ограничиться только анализом > этого в вызывающем коде? > Мы ж не анализируем в ТРАЙ/КЭТЧ блоке результаты методов > КОМ. Почти всегда идет анализ ! FAILED( rc ), или S_OK. Между прочим, это форменное безобразие. Это прогулка по тем же граблям, что и с оператором new, про историю о котором, вы, видимо, все же не в курсе.
История следующая: поначалу operator new, в стиле malloc, при недостатке памяти возвращал 0. Все бы хорошо, вот только большинство программистов на проверку возвращаемого указателя на ноль попросту забивало. Нетрудно догадаться, что после этого в лучшем случае происходила попытка разыменования нулевого указателя, в худшем - неопределенное поведение. В связи с этим в стандарте 98-года (а может быть, и в предыдущем, не помню) прописано, что operator new при недостатке памяти выбрасывает исключение, а ноль возвращает специальная (nothrow)-версия.
Возвращаемые значения очень легко забыть проверить. Особенно если вы сначала пишете return <вызов функции> в расчете на то, что if (!FAILED(rc)) написано в вызывающей функции (ведь так не хочется дорисовывать лишнюю проверку). А потом <вызов функции> в порядке развития функциональности перемещается в тело функции, а if (!FAILED(rc)) по забывчивости так и не появляется.
|
|
|