Мне известно о нескольких играх, написанных на C ++, но не использующих исключения. Так как обработка ошибки выделения памяти в C ++ обычно строится вокруг std::bad_allocисключения, как эти игры справляются с такой ошибкой?
Они просто аварийно завершают работу или есть другой способ обработки и восстановления после ошибки нехватки памяти?
std::terminate, и это все. Но тогда, с тем же ограничением, распределение может возвращать нулевой указатель вместо исключения, и этот результат может быть проверен и обработан отдельно.
ClassName variableName = new(nothrow) ClassName();( очевидно, заменяя имя класса, имя переменной и т. Д. ). Затем, если распределение завершится неудачно, вы можете обнаружить это, сказав, if(!variableName)что ошибка может быть обработана без блока исключения try-catch. Точно так же, если память выделяется с использованием функции , как malloc(), calloc()и т.д., то отказы выделить могут быть обнаружены с использованием того же if(!variableName)метода без необходимости Try-улов. Что касается того, как игры справляются с этими ошибками, ну, на этом этапе, разработчики игры должны решить, сбоит она или нет.