Обработчик завершения не разрешен к возврату (§18.6. 3.1 / 2); он должен завершить программу (обработчик по умолчанию вызывает abort()
). Если он состоял из:
void my_terminate()
{
throw 5;
}
Вы получили бы неопределенное поведение, потому что вы оставили бы функцию (потому что исключение распространяется), не завершив программу. Поэтому, если у вас есть код, который может выдать, убедитесь, что вы перехватываете все исключения, например:
void my_terminate()
{
try
{
// stuff
}
catch(...)
{
// too bad
}
abort();
}
Однако (для ответа на заглавный вопрос) я не вижу ничего, что ограничивало бы его повторный ввод, поэтому с технической точки зрения это должно быть хорошо:
void my_terminate()
{
static int counter = 0;
if (counter++ < 5)
terminate();
abort();
}