Проблема с кодом C состоит в том, что вы должны проверить возвращаемое значение функции, чтобы убедиться, что они работают правильно.Но было написано много кода, который не проверял возвращаемое значение и в результате очень хорошо взорвался, когда вы меньше всего этого ожидали.
В худшем случае он даже сразу не падает, но продолжает повреждать памятьпадение в какой-то момент в нескольких милях вниз по течению от ошибки.
Таким образом, в C ++ возникли исключения.
Теперь, когда возникает ошибка, код не продолжается (следовательно, нет повреждения памяти), но разматывает стек (потенциальнозаставляя приложение выйти).Если вы можете решить проблему, вы должны явно добавить код для обработки ситуации, прежде чем продолжить.Таким образом, вы не можете случайно забыть не проверять состояние ошибки;либо вы проверите его, либо приложение выйдет из системы.
Использование новых подходит для этого дизайна.
Если вам не удастся выделить память, вы должны явно обработать ошибку.
Нет возможности забытьпроверить на нулевой указатель.Таким образом, вы не можете испортить память, случайно используя указатель NULL.
Кроме того, при статическом распределении памяти, то есть в стеке, есть ли исключение, если у нас заканчивается память?
К сожалению, вы не можете полагаться на это.
Это определяется реализацией того, что происходит при переполнении стека.На многих системах даже невозможно обнаружить ситуацию, приводящую к повреждению памяти и, возможно, в конечном итоге к сбою.
Примечание
Если вы #include , то существует новая версия без бросков, которую вы можете использовать, которая возвращает NULL, когда не осталось памяти.Лучше избегать этого, если у вас нет особых потребностей.