Как запретить исключение std::bad_alloc?

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Это возврат к ассемблеру, когда при невозможности выделить память функция дает 0.
В языках высокого уровня общепринятой практикой является использование try/catch/finally и их синонимов
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Трай/кеч нужен, когда ошибка возникает в одном месте, а реагировать на неё надо в другом через несколько уровней вызовов, то есть это хвост контекстной парадигмы. В случае выделения памяти сразу по нескольким указателям это приведёт к невозможности подчистить за собой, так как исклюкака может свалиться после успешного выделения памяти по части указателей. Освободить после этого память можно будет только прибив всю прогу. Но обработка исключений предназначена для того, чтоб программа могла продолжаться при любых исключениях. Прибить прогу отлично сможет система, обрабатывать для этого ничего не надо. Если же кеч писать рядом с местом возникновения ошибки, то получаем стрельбу "энергией" по тараканам: есть более простые способы обработки ошибок рядом с местом их возникновения, при этом они ещё и не требуют включения в код заведомо тормозящей подсистемы. И каким боком здесь ассемблер? Он как раз отлично заменяет принудительные исключения переходами по таблице переходов именно там этот стиль всегда проще кодов возврата, которые и вернуть как то надо, и потом опять таки перейти в зависимости от них по той же таблице. Да и сами коды исключений отчётливо багоухают опкодами. Это ведь не if, условие в котором можно составить согласно правилам языка, а просто ни с чем не связанная и даже не запоминабельная последовательность символов. std::bad_alloc? А почему не std::ba_dalloc? Или не std::fdshafd? Это просто код, такой же, как BB 11 01. MOVE хоть запомнить можно, уже преимущество. Или LD - сокращение от LOAD. А коды исключений? Ну да, иногда бывает полезно и по справочнику исключений порыться. Но не в этом же случае! Вот если сразу на асме писать, тогда другое дело, тогда можно на каждый чих вручную "скомпилировать" бросок и обработку исключений и при этом ещё позаботиться о передаче не просто кода исключения, а всей информации о нём. Кстати, на паскале то исключения приняты, например, на выход за границы массива, что уже само по себе опровергает утверждение о каком то мифическом обычае бросать исключения на каждый чих не на низком, а именно на высоком уровне.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Ответить