我制作了一个类,它使用new(只是为了好玩!)递归地创建自己,希望std::bad_alloc由于无限的动态分配(堆溢出)而抛出该类。但是发生堆栈溢出而不是std::bad_alloc。为什么会这样?
class Overflow
{
private:
Overflow* overflow;
public:
Overflow()
{
overflow = new Overflow();
}
};
int main()
{
Overflow overflow_happens; // stack overflow happens instead of std::bad_alloc exeption
}
Run Code Online (Sandbox Code Playgroud)
@Caleth问如果我将new Overflow()更改为new Overflow [100000],会发生什么,这给了我std::bad_alloc。根据答案,这岂不是还会给我堆栈溢出吗?