Здравствуйте, Lorenzo_LAMAS, Вы писали:
ГС>Обычная форма new кидает исключение bad_alloc.
ГС>Но если записать:
ГС> int *k_arr = new (std::nothrow) int[UINT_MAX]; // allocation will fail
ГС>то исключения небудет, но перед использованием указатель нужно проверить на NULL.
L_L>Это по стандарту так все должно быть. А вот допустим в VC 6.0 по-моему было неправильно — ноль возвращался.
L_L>А сгенерить исключение, ну так попробуй так
L_L>L_L>try{
L_L>for(;;)
L_L> int * p = new int[10000000];//:))
L_L> if(!p)break;
L_L>}
L_L>catch(std::bad_alloc)
L_L>{
L_L> //попадешь ли ты сюда?
L_L>}
L_L>
Да, действительно, MSVC7 несовсем соотв. стандарту в этом отношении. Если не подключена STL (напр., iostream), new возвращает 0. Иначе -- кидает исключение.
Спасибо.