5.2.1. 使用 ::operator new 函数

根据 ISO C++ 标准,在内存分配失败时,::operator new(std::size_t) 将抛出异常,而不是发出信号。 如果未捕获到异常,则会调用 std::terminate()

编译器选项 --force_new_nothrow 将编译中的所有新调用转变为 ::operator new(std::size_t, std::nothrow_t&):operator new[](std::size_t, std::nothrow_t&) 调用。 但是,这并不影响库中的 operator new 调用,也不影响对任何类特定的 operator new 的调用。 有关详细信息,请参阅--[no_]force_new_nothrow

遗留对象支持

在 RVCT 2.0 版中,当 ::operator new 函数出现内存不足时,它将发出信号 SIGOUTOFHEAP,而不是抛出 C++ 异常。 请参阅库指南中的第 2-106 页的ISO C 库实现定义

在当前版本中,可以安装 new_handler 以发出信号,从而恢复 RVCT 2.0 版行为。

Note

不要依赖此行为的实现细节,因为它在将来版本中可能会发生变化。

Copyright © 2007 ARM Limited. All rights reserved. ARM DUI 0348AC
Non-Confidential