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

发布于 2024-11-27 20:48:34 字数 53 浏览 1 评论 0原文

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

我最近才知道 Android 支持异常。

Will any exception be thrown when an attempt to allocate memory fails?

I just recently learned that exceptions are supported in Android.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

灼疼热情 2024-12-04 20:48:34

我下载了 ndk 并在文档文件夹 CPLUSPLUS-SUPPORT.HTML 中找到了它。

我。 C++ 异常支持:

自 NDK r5 起,NDK 工具链支持 C++ 异常,但所有 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 。

I downloaded the ndk and found this in the docs folder, CPLUSPLUS-SUPPORT.HTML .

I. C++ Exceptions support:

The NDK toolchain supports C++ exceptions, since NDK r5, however all C++
sources are compiled with -fno-exceptions support by default, for
compatibility reasons with previous releases.

To enable it, use the '-fexceptions' C++ compiler flag. This can be done
by adding the following to every module definition in your Android.mk:

LOCAL_CPPFLAGS += -fexceptions

More simply, add a single line to your Application.mk, the setting will
automatically apply to all your project's NDK modules:

APP_CPPFLAGS += -fexceptions

NOTE: The obsolete "arm-eabi-4.4.0" toolchain provided for backwards
compatibility with this NDK does not support exceptions!

So exceptions seems to be supported, as long as the application is compiled with '-fexceptions'. So my understanding is that code compiled with -fexceptions will throw std::bad_alloc on failure to allocate memory.

辞慾 2024-12-04 20:48:34

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

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

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

I didn't think exceptions were supported on Android. If this has been changed recently could you post the link to your reference article? I was under the impression a failed allocation with new operator will return a null pointer on Android.

In which case if you use (nothrow) on your end you should comply with their default allocation behavior and get the same result as expected on Android.

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文