Операторы C ++ все новые и новые [] выбрасывают std :: bad_alloc на Android? - PullRequest
8 голосов
/ 04 августа 2011

Будет ли выброшено какое-либо исключение при неудачной попытке выделить память?

Я недавно узнал, что исключения поддерживаются в Android.

Ответы [ 2 ]

4 голосов
/ 05 августа 2011

Я скачал ndk и нашел его в папке docs, CPLUSPLUS-SUPPORT.HTML.

I. Поддержка исключений C ++:

Набор инструментов NDK поддерживает исключения C ++, начиная с NDK r5, однако все C ++ исходники скомпилированы с поддержкой -fno-excptions по умолчанию, для причины совместимости с предыдущими выпусками.

Чтобы включить его, используйте флаг компилятора C ++ '-fexceptions'. Это можно сделать добавив следующее к каждому определению модуля в вашем Android.mk:

LOCAL_CPPFLAGS += -fexceptions

Проще говоря, добавьте одну строку в ваш Application.mk, настройка будет автоматически применяется ко всем модулям NDK вашего проекта:

APP_CPPFLAGS += -fexceptions

ПРИМЕЧАНИЕ. Устаревшая цепочка инструментов «arm-eabi-4.4.0» предназначена для использования в обратном направлении. совместимость с этим NDK не поддерживает исключения!

Таким образом, исключения, похоже, поддерживаются, если приложение компилируется с параметром -fexceptions. Таким образом, я понимаю, что код, скомпилированный с -fexceptions, сгенерирует std :: bad_alloc при неудачном выделении памяти.

0 голосов
/ 04 августа 2011

Я не думаю, что исключения поддерживаются на Android. Если это было недавно изменено, не могли бы вы опубликовать ссылку на вашу справочную статью? У меня сложилось впечатление, что неудачное размещение с новым оператором вернет нулевой указатель на Android.

В этом случае, если вы используете (nothrow) на своем конце, вы должны соблюдать их поведение по умолчанию и получить тот же результат, что и ожидалось на Android.

http://www.cplusplus.com/reference/std/new/nothrow/

...