Ответ 1
Тем не менее, я почти не вижу эту версию в своем опыте.
Вы бы использовали его (или, что то же самое, поймать исключение из версии по умолчанию), если вы можете обрабатывать ошибку локально; возможно, попросив освободить другую память, а затем повторить попытку или попытаться выделить что-то меньшее или использовать альтернативный алгоритм, который не требует дополнительной памяти.
Есть ли какая-то причина, по которой мы предпочитаем дефолт по отношению к нечетному?
Общий принцип исключений: если вы не можете обрабатывать его локально, тогда нет места для проверки локально. В отличие от возвращаемых значений исключения нельзя игнорировать, поэтому нет возможности вспашки независимо и с использованием нулевого указателя.
Даже в проекте, который не использует исключение?
Зачастую состояние с отсутствием памяти не может быть обработано вообще. В этом случае прекращение программы, вероятно, является лучшим ответом; и это ответ по умолчанию на необработанное исключение. Таким образом, даже если вы не используете исключения, то по умолчанию new
, вероятно, лучший вариант в большинстве ситуаций.
следует проверить возвращаемое значение
malloc()
?
Да: это единственный способ проверить, удалось ли это. Если вы этого не сделаете, вы можете в конечном итоге использовать нулевой указатель, давая неопределенное поведение: часто сбой, но, возможно, повреждение данных или другое странное поведение и длительные сеансы отладки (надеюсь) выяснить, что пошло не так.
Почему мы рассматриваем
malloc()
иnew
разному в этом случае?
Поскольку malloc
заставляет нас проверять возвращаемое значение, в то время как new
дает нам возможность менее интрузивной обработки ошибок.