Вы правы, это проблема нехватки памяти, которая приводит к завершению вашей программы. Но не Windows решает завершить его "ненормальным завершением программы". Это среда выполнения C ++ («msvcrt * .dll» в Windows), которая вызывает исключение std::bad_alloc
, когда new Thing
не удается выделить память.
Вы можете проверить это с помощью простого изменения:
#include <exception>
#include <iostream>
class Thing {};
int main()
{
try
{
for (;;) new Thing();
}
catch(std::bad_alloc e)
{
std::cout << "ending with bad_alloc" << std::endl;
}
}
Это нормально завершит программу, когда программе не хватит памяти. Если вы не поймаете это исключение, необработанное исключение будет обработано средой выполнения C ++, что приведет к созданию этого знаменитого сообщения «Аварийное завершение программы» (или что-то подобное).