Вопрос...
От: F1aSh  
Дата: 04.12.05 06:37
Оценка:
В МСДНе нашел

// 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 со сих пор не делал, а сейчас вот понадобилось сделать интерфейс дерева — оч удобно было бы ... )
Re: Вопрос...
От: sch  
Дата: 04.12.05 07:46
Оценка:
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).

Способы вызова этих функций ты уже привел в своем посте.
Re: Вопрос...
От: ekamaloff Великобритания  
Дата: 05.12.05 04:43
Оценка:
Здравствуйте, F1aSh, Вы писали:

FS>2 вопрос: как создать свой файлик *.h (стыдно, но я не знаю :D со сих пор не делал, а сейчас вот понадобилось сделать интерфейс дерева — оч удобно было бы ... )


Что вы имеете ввиду?
It is always bad to give advices, but you will be never forgiven for a good one.
Oscar Wilde
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.