从以下文档:new
如果第一个版本 (1) 未能分配存储,则抛出 bad_alloc。否则,它不会抛出异常(不抛出保证)。
对我来说,这应该意味着这段代码
#include <new>
struct A{
A(){
throw 0;
}
};
int main(){
try{
A* a = new A;
}
catch(std::bad_alloc&){}
}
很好。然而,当用 gcc 编译它时(见这里),程序在抛出一个int
.