Я создал класс, который рекурсивно создает себя, используя 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
}
@Caleth спросил, что произойдет, если я заменю новый Overflow() на новый Overflow [100000], и это дало мне std::bad_alloc
. Согласно ответам, не должно ли это также привести к переполнению стека?