【发布时间】:2017-08-04 03:09:24
【问题描述】:
来自 C++11 标准 (15.1.p4):
异常对象的内存以未指定的方式分配 方式,除非在 3.7.4.1 中注明
如果分配失败怎么办——它会抛出std::bad_alloc 吗?致电std::terminate?未指定?
【问题讨论】:
-
FWIW,size of the exception object can be quite big,如果你尝试分配太大的东西,appears that
std::terminateis called。这是否是标准中的指定行为我不确定。 -
在一个不太极端的例子中,不涉及堆栈溢出,我希望
bad_alloc。此外,一些编译器会为“合理”数量的异常预先分配空间。 -
@BoPersson 期望无关紧要——标准是否指定了将要发生的事情?看起来像一个需要修复的遗漏
-
Itanium ABI 指定
__cxa_allocate_exception在无法分配内存时调用terminate。 -
@T.C.如果这种行为在标准 POV 中是可以的,那么就不可能编写可靠的 C++ 代码。在这种情况下,我找不到任何禁止或允许 std::teminate() 的东西。