C++   ::   Хилл Мюррей

Страница: 117 из 357



void out_of_store()

(* cerr «„ «операция new не прошла: за пределами памяти\n“; exit(1); *)

typedef void (*PF)(); // тип указатель на функцию

extern PF set_new_handler(PF);

main() (* set_new_handler(out_of_store); char* p = new char[100000000]; cout «„ "сделано, p = " «« long(p) «« «\n“; *)

как правило, не будет писать «сделано», а будет вместо этого выдавать

операция new не прошла: за пределами памяти

Функция _new_handler может делать и кое-что поумней, чем просто завершать выполнение программы. Если вы знаете, как работают new и delete, например, потому, что вы задали свои собственные operator new() и operator delete(), программа оработки может попытаться найти некоторое количество памяти, которое возвратит new. Другими словами, пользователь может сделать сборщик мусора, сделав, таким образом, использование delete необязательным. Но это, конечно, все-таки задача не для начинающего.

По историческим причинам new просто возвращает указатель 0, если она не может найти достаточное количество памяти и не был задан никакой _new_handler. Например

include «stream.h»

main() (* char* p = new char[100000000]; cout «„ "сделано, p = " «« long(p) «« «\n“; *)

выдаст

сделано, p = 0

Вам сделали предупреждение! Заметьте, что тот, кто задет _new_handler, берет на себя заботу по проверке истощения памяти при каждом использовании new в программе (за исключнием случая, когда пользователь задал отдельные подпрограммы для размещения объектов заданных типов, определяемых пользвателем, см. #5.5.6).



3.3 Сводка операторов

Операторы С++ систематически и полностью изложены в #с.9, прочитайте, пожалуйста, этот раздел. А здесь приводится краткая сводка и некоторые примеры.

|< Пред. 115 116 117 118 119 След. >|

Java книги

Контакты: [email protected]