Я работаю над большой устаревшей кодовой базой для приложения MFC. Со временем над этим кодом работали многие разработчики, и в результате в коде есть три различных способа справиться с возможностью сбоя при выделении нового.
Первый способ - проверить NULL на результат new. Мы не используем nothrownew.obj, так что это явно ошибка, которую необходимо устранить.
Второе - перехватывать CMemoryException * (да, исключения C ++ включены в компиляторе). Из того, что я понимаю, MFC переопределяет стандартный оператор new и выбрасывает эту вещь вместо этого. Я совершенно уверен, что этот второй метод является правильным в самом приложении MFC. MFC переопределяет новый, со своей странной версией CMemoryException.
Последнее исходит от нашей базы людей, которые хорошо разбираются в C ++, но не обязательно являются программистами MFC. Они ловят const std :: bad_alloc &.
Чего я действительно не знаю, так это того, что ожидать от статических библиотек, связанных с приложением. Это было подавляющее большинство кода, который использует bad_alloc жизни. Предполагая, что эти библиотеки не скомпилированы с MFC или ATL и написаны только на стандартном C ++, могут ли они ожидать перехвата bad_alloc? Или же присутствие MFC в приложении, на которое они ссылаются, заразит их глобальным новым оператором и сделает их попытки завершиться неудачей из-за неудачного распределения?
Если у вас есть ответ, не могли бы вы объяснить, как это работает, или указать мне правильную ссылку, чтобы разобраться в этом?