В МСДНе нашел
// new_and_delete.cpp
// compile with: /EHsc
#include <stdio.h>
#include <new>
#include <limits.h>
int main()
{
int * i_arr;
try {
i_arr = new int[0x3fffffff];
}
catch(...) {
printf("caught exception\n");
}
int * k_arr;
k_arr = new (std::nothrow) int[0x3fffffff];
delete[] i_arr; // vector delete
delete[] k_arr;
}
Что за std::nothrow... И вообще чем такое использование отличается от обычного использования new
2 вопрос: как создать свой файлик *.h (стыдно, но я не знаю :D со сих пор не делал, а сейчас вот понадобилось сделать интерфейс дерева — оч удобно было бы ... )
FS>Что за std::nothrow... И вообще чем такое использование отличается от обычного использования new
В STL определено восемь функций для динамического выделения памяти. Сигнатуры у них различные, но с точки зрения нашего случая, есть два основных типа:
void *operator new(std::size_t size) throw(std::bad_alloc); // 1
void *operator new(std::size_t size, const std::nothrow_t &) throw(); // 2
...
Различаются они тем, что operator new() типа 1 при ошибке выеделения памяти бросают исключение std::bad_alloc, в то время как функция второго типа при ошибке не бросают исключение, а возвращают (void *) 0.
(Поведение операторов по выделению памяти несоклько более сложное, если интересно -- читай 18.4.1.1).
Способы вызова этих функций ты уже привел в своем посте.
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde