По стандарту, это можно, но вот на практике у меня на Убунту 13.04 и g++ 4.7.3 следующая программа просто убивается (ядром как я понимаю). Я же расчитывал что по коду возврата смогу понять, что именно происходит, но код возврата всегда равен 137. Заранее благодарю.
#include <iostream>
#include <new>
#include <cstdlib>
void no_more_ram()
{
exit(3);
}
int main()
{
std::set_new_handler(no_more_ram);
std::cout << "!!!Hello World!!!" << std::endl; // prints !!!Hello World!!!
try
{
while (true)
{
int* p= new int[1024 * 1024];
if (!p)
{
exit(4);
}
}
} catch (const std::bad_alloc& ex)
{
return 1;
} catch (...)
{
return 2;
}
return 0;
}