在Android上,C ++运算符new和new []抛出std :: bad_alloc吗?

时间:2011-08-04 18:57:37

标签: android c++ exception android-ndk new-operator

当尝试分配内存失败时会抛出任何异常吗?

我刚刚了解到Android支持例外情况。

2 个答案:

答案 0 :(得分:4)

我下载了ndk并在docs文件夹中找到了这个,CPLUSPLUS-SUPPORT.HTML。

  

予。 C ++ Exceptions支持:

     

NDK工具链支持C ++异常,因为NDK r5,但是所有的C ++   默认情况下,使用-fno-exceptions支持编译源代码   与先前版本的兼容性原因。

     

要启用它,请使用'-fexceptions'C ++编译器标志。这可以做到   将以下内容添加到Android.mk中的每个模块定义中:

LOCAL_CPPFLAGS += -fexceptions
     

更简单地说,在Application.mk中添加一行,设置即可   自动应用于您项目的所有NDK模块:

APP_CPPFLAGS += -fexceptions
     

注意:过时的“arm-eabi-4.4.0”工具链是向后提供的         与此NDK的兼容性不支持例外!

因此,只要使用'-fexceptions'编译应用程序,就可以支持异常。所以我的理解是,使用-fexceptions编译的代码会在分配内存失败时抛出std :: bad_alloc。

答案 1 :(得分:0)

我不认为Android支持例外。如果最近更改了这个,您可以将链接发布到您的参考文章吗?我的印象是,使用new运算符的失败分配将在Android上返回空指针。

在这种情况下,如果您在最后使用(nothrow),则应遵守其默认分配行为,并获得与Android上预期相同的结果。

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